Cardboard虚拟现实开发初步(一)
Google Cardboard 虚拟现实眼镜开发初步(一)
虚拟现实技术简单介绍
不得不说这几年虚拟现实技术逐渐火热,伴随着虚拟现实设备的价格迅速平民化,越来越多的虚拟现实设备来到了我们眼前,也因此虚拟现实方面的开发离我们也越来越近。
这几年迅速崛起的Oculus,其成功就在于拉近了虚拟现实与群众的距离。把原本价格高不可攀的虚拟现实设备放到了我们能够触手可及的位置。Oculus的技术开辟了全新的体验和可能性。不仅仅在游戏领域,还在生活、教育、医疗等诸多领域拥有广阔的想象空间,Facebook在2014年7月宣布以20亿美元的价格收购Oculus。
据说Oculus的逼真程度是非常之高的,和国内眼下比較easy接触到的魔镜一类效果差距是非常大的,Oculus 官方宣称他具有110 度的视角,而且带有头部姿态传感器,Oculus通过不断地优化大大减少了头痛、恶心感,而且利用全位置跟踪功能和高分辨率的显示屏,提供了更加逼真的感受。
Oculus Rift一些早期版本号导致使用者出现恶心或神志不清的状况,但最新的“Crescent Bay”推出之后,这样的情况非常少出现了。
造成头痛、恶心感的主要原因是延迟。
Oculus团队内部有一个词叫Motion-to-photons latency。意思是指从玩家运动头部到在屏幕上看到新图像为止的一个周期里所产生的延迟时长总和,Oculus的任务就是尽可能地削减整个流程产生的延迟时长,来消除恶心感。
近期PewDiePie首次将Oculus Rift头戴式显示器和能够在3D空间内感知手势动作的Leap Motion体感控制器组合在一起,实现了当用户移动头部并全然沉浸在3D虚拟环境中时能够看见自己的双手。
所以不得不说Oculus是一款非常酷的产品。
除了Oculus外。其它非常多虚拟现实设备也在发展其中,如:
HTC的Vive VR
三星的Gear VR。Gear VR的硬件制造者是三星,但其虚拟技术的提供者是Oculus。
Gear VR能够提供全然虚拟现实的体验。但它使用三星智能手机取代计算机来驱动显示器。
还有增强现实领域的微软的HoloLens,总体表现令人惊艳。
最后介绍Google Cardboard,我们的虚拟现实眼镜开发新手教程便是基于Cardboard SDK for Unity
于北京时间2015年5月29日凌晨0:30在美国旧金山举办的2015谷歌I/O开发人员大会上。素来以大方著称的谷歌并没有像以往那样大派礼物。除了三星或者LG智能手表的二选一外,开发人员还能够领到一个小小的黄色纸板盒Cardboard。
只是,这个看起来非常寒碜的再生纸板盒却是I/O大会上最令人惊喜的产品,这就是谷歌推出的便宜3D眼镜。
Cardboard简单介绍
Cardboard最初是谷歌法国巴黎部门的两位project师大卫·科兹(David Coz)和达米安·亨利(Damien Henry)的创意。他们利用谷歌“20%时间”规定,花了6个月的时间。打造出来这个实验项目,意在将智能手机变成一个虚拟现实的原型设备。
Cardboard纸盒内包含了纸板、双凸透镜、磁石、魔力贴、橡皮筋以及NFC贴等部件。依照纸盒上面的说明,几分钟内就组装出一个看起来非常简陋的玩具眼镜。凸透镜的前部留了一个放手机的空间,而半圆形的凹槽正好能够把脸和鼻子埋进去。
Cardboard仅仅是一副简单的3D眼镜。但这个眼镜加上智能手机就能够组成一个虚拟现实(VR)设备。
要使用Cardboard,用户还须要在Google Play官网上搜索Cardboard应用。它能够将手机里的内容进行分屏显示。两仅仅眼睛看到的内容有视差。从而产生立体效果。通过使用手机摄像头和内置的螺旋仪。在移动头部时能让眼前显示的内容也会产生对应变化。
应用程序能够让用户在虚拟现实的情景下观看YouTube、谷歌街景或谷歌地球。
Cardboard原理
CardBoard的虚拟现实效果是由一款CardBoard与一部安卓手机结合而成。眼镜镜体通过透镜加屏幕的原理,将虚像呈如今人的明视距离处实现了沉浸式的虚拟现实感,眼下国内虚拟现实眼镜(如暴风魔镜等)大都是这个原理,仅仅只是做了仔细的包装,使得佩戴更加舒适,以下为其原理图:
而屏幕即为一部安卓系统的手机,手机的分辨率与像素密度越大显示效果越好,因为採用了透镜放大与分屏显示的原理,假设分辨率较低,颗粒感会比較严重。
手机屏幕上须要分屏显示虚拟环境,开发人员还须要调用手机内部陀螺仪等传感器进行视角转变。这一部分的开发无疑有非常多选择,使用纯Android的SurfaceView与openGL ES 开发可扩展性非常强。可是对应的复杂度比較高。导入3D模型等都须要手写代码。亦或者使用3D引擎如Unity3D等进行开发,适合开发游戏。复杂性较低,模拟左右双眼仅仅须要两个摄像机就能够搞定,可是开发复杂应用又会力不从心。总之在开发前要依据项目进行选择开发的方式。
因为Unity引擎功能强大。基本上能适应大部分需求,而且开发便利。资料非常全,最关键的是Google提供了一个Cardboard SDK for Unity,能够非常方便的进入虚拟现实的世界,所以我们毫无疑问要站在巨人的肩膀上開始旅行了。
本篇作为系列的开篇,主要是讲了一些虚拟现实的技术和原理,下一篇就会带领大家去看一看谷歌的Cardboard SDK for Unity,之后还会教大家非常easy的做出自己的第一个CardBoard应用,大家从淘宝上花不到10块钱买一个Cardboard或者买个暴风魔镜就能够測试自己的虚拟现实应用了,敬请期待~
Cardboard虚拟现实开发初步(一)的更多相关文章
- Cardboard虚拟现实开发初步(二)
Google Cardboard 虚拟现实眼镜开发初步(二) Cardboard SDK for Unity的使用 上一篇文章作为系列的开篇,主要是讲了一些虚拟现实的技术和原理,本篇就会带领大家去看一 ...
- Hello,Cardboard!!-如何开发一个最简单的Cardboard虚拟现实应用(一)
[原创文章,转载请注明出处,谢谢 !] 温馨提醒,本篇第一节主要介绍cardboard虚拟现实系统的组成,如果只想看如何开发的具体步骤请直接跳到第二节^_^ 前述:恕我啰嗦一下,主要照顾对cardbo ...
- [入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二)
[入门级] 基于 visual studio 2010 mvc4 的图书管理系统开发初步 (二) Date 周六 10 一月 2015 By 钟谢伟 Category website develop ...
- DONET三层架构开发初步
.NET三层架构开发初步 今天咱们来谈下三层架构.说到三层架构,搞过点程序的可能都知道三层架构的概念.但是对三层的精髓可能不是很了解. 首先说下自己对三层的理解,就是使用三个(多个)项目结合起来开发出 ...
- (转)TDD的iOS开发初步以及Kiwi使用入门
本文转自“瞄神”博客 TDD的iOS开发初步以及Kiwi使用入门 测试驱动开发(Test Driven Development,以下简称TDD)是保证代码质量的不二法则,也是先进程序开发的共识.App ...
- TensorRT 7.2.1开发初步
TensorRT 7.2.1开发初步 TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层.它显示了如何采用深度学习框架构建现有模型,并使用该模 ...
- 以太坊web3开发初步学习
以太坊web3开发初步学习 此文是对https://learnblockchain.cn/2018/04/15/web3-html/的学习再理解. 以太坊智能合约通过使用web3.js前端和智能合约交 ...
- 开发一个最简单的Cardboard虚拟现实应用(四)做一个Cardboard第一人称控制器
[开源互助-原创文章,转载请说明出处]第三帖中已经创建了一个cardboard自带的demo应用,但它是不能移动的,玩家只能站在原地,通过头部转动来观察四周,除此之外,玩家并没有更多的手段与游戏场景进 ...
- TDD的iOS开发初步以及Kiwi使用入门
测试驱动开发(Test Driven Development,以下简称TDD)是保证代码质量的不二法则,也是先进程序开发的共识.Apple一直致力于在iOS开发中集成更加方便和可用的测试,在Xcode ...
随机推荐
- bzoj4030【HEOI2015】小L的白日梦
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=4030 sol :orz Yousiki http://www.cnblogs.com/you ...
- spring项目启动报错BeanFactory not initialized or already closed
spring项目启动的时候报如下错误: java.lang.IllegalStateException: BeanFactory not initialized or already closed - ...
- 51Nod 1028 大数乘法 V2
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1028 分析: FFT/NTT板子题... 代码: NTT板子: #inc ...
- python print的参数介绍
参考print的官方文档 print(...) print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints th ...
- JS-JavaScript String 对象-string对象方法3:concat()
1.concat():用于连接两个或多个字符串. 1).语法:string.concat(string1, string2, ..., stringX) (string1, string2, . ...
- php基础 gd图像生成、缩放、logo水印和验证码
gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片.验证码.水印.缩略图等等. 图像生成 <?php /* 用windows画图板画图 1.新建空白画布(指定 ...
- 8大排序算法的java实现--做个人收藏
排序算法分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因为数据量太大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.这里只讨论内部排序,常见的内部排序算法有:插入排序 ...
- [LOJ6235]区间素数个数
题目大意: 给定$n(n\leq10^{11})$,求$\pi(n)$. 思路: 计算$\pi$函数有$O(n^{\frac23})$的Lehmer算法,这里考虑$O(\frac{n^{\frac34 ...
- 【Kafka】《Kafka权威指南》——分区partition
在上篇的例子里([Kafka]<Kafka权威指南>--写数据), ProducerRecord 对象包含了目标主题.键和值. Kafka 的消息是 一个个 键值对, ProducerRe ...
- 关于ProGuard的学习了解(从别处转来)
关于ProGuard的学习了解(从别处转来) [Android]jar包Proguard混淆方法 Proguard 使用详解 Proguard语法及常用proguard.cfg代码段 Proguard ...