Android手机与vr交互暴风魔镜3D效果显示原理

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/insist_hui/article/details/51942563

首先讲到VR,谈谈个人体会,半年前看到淘宝上的vr眼镜盒为了促销标题图片都是非常性感的,还有海量你懂得资源。到最近在淘宝搜索vr暴风魔镜都正规了,而且销售量庞大

还有新闻上很多vr的科技前沿资讯可以看出来。vr技术随时间的流逝正在日益发展成熟,就像曾经的诺基亚到安卓,苹果。可以说vr技术现在还未成熟,但是具有强大的潜力价值。


----眼睛的呈像原理:

人眼视觉的立体感和空间的距离感时如何产生的?

人有两只眼睛看到的事物有叠加的部分,而角度又不完全相同。两眼得到的是有细微差别的不同图像,在大脑中得到的图像就有了立体感,即能够分辨出距离,大脑通过对两个影像的处理感知距离和空间。

	立体电影就是根据这个原理:拍摄时用两台摄影机离开一定距离同步拍摄,放映时两台放影机同步放映两部电影,且运用偏光镜将左右两部电影的光设置成不同的偏振方式。观看者戴上特制的偏光眼镜,让两眼分别看到不同的放映机光线,在大脑中就得到了强烈的立体图像。

做一个很简单的测试,闭上你一只眼睛,去摸一个放在桌子上铅笔的笔尖,很难摸到,因为单眼得到的图像没有立体感,只能凭经验来区别。


-----接下来谈谈VR:

虚拟现实头戴显示器设备,简称VR头显VR眼镜,手机屏幕只有一个,而我们却有两个眼睛,又必须要让左、右眼所看的图像同步且各自独立分开,才能有立体视觉。所以看vr电影最基本的条件就是将手机屏幕分屏,然后通过两个镜片,左右眼得到同样的图像信息,消除双眼视角重叠带来的分离感,从而取代了看到前方是距离很近的显示屏的感觉。

还有就是手机的传感器,目前vr视频播放会使用手机的陀螺仪等重力传感器实现视频播放过程周围视角的随角度转变,如同真正意义上的看头转动看周围及身后。这就是身临其境的效果实现原理,但是这些视频由于360度的效果往往内存巨大,常见的vr视频为全景和左右视角。



-----未来前景:

主机平台现在有一类游戏,以高画质剧情体验为主,操作非常简单,俗称“游戏电影化”。目前VR圈也有很大一部分人在尝试VR电影的制作,但是基于360°视频的拍摄手法在VR的沉浸感并不是很好,而且传统的电影拍摄手法也不适合VR视频制作。所以,电脑制作的3D动画类电影在VR化方面具有先天优势,再结合VR头显的一些输入特性,甚至会产生“电影游戏化”的产品。另一方面,以UE4为代表的游戏引擎,实时渲染的画面效果已经达到了CG级别,在技术上具备了制作实时渲染电影的能力。可以预见到,未来的VR互动电影与VR游戏,它们之间的边界会变得十分模糊。

老实说,当vr技术开发完善后,手机的3D游戏将真正实现身临其境的感觉。当然身临其境的恐怖丧尸类的游戏将只会是勇敢者才敢尝试的禁区。对于手机游戏将会有巨大的改变,对手机日常应用也将让商品购物变成立体的。

所以说vr技术完善的那天将会有多么巨大的改变。vr有巨大的潜力市场。

不过现在还有几大问题:手机电量的限制,手机散热措施不完善,长时间视频观看有时导致大脑晕眩,近距离是否会对眼睛造成损害吗,大型3D手机运行内存问题(这个手机升级中将不再是问题)等。这是我的个人看法。


-----前面是vr的介绍,现在来点干货:

1、vr的陀螺仪传感器等:

SENSOR_TYPE_ACCELEROMETER 1 //加速度  
  
SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力  
  
SENSOR_TYPE_ORIENTATION 3 //方向  
  
SENSOR_TYPE_GYROSCOPE 4 //陀螺仪  
  
SENSOR_TYPE_LIGHT 5 //光线感应  
  
SENSOR_TYPE_PRESSURE 6 //压力  
  
SENSOR_TYPE_TEMPERATURE 7 //温度  
  
SENSOR_TYPE_PROXIMITY 8 //接近  
  
SENSOR_TYPE_GRAVITY 9 //重力  
  
SENSOR_TYPE_LINEAR_ACCELERATION 10//线性加速度  
  
SENSOR_TYPE_ROTATION_VECTOR 11//旋转矢量  

对于屏幕播放视角的控制。陀螺仪有些旧手机没有这功能。而且vr的软件版本要求较高。


2.vr的手机屏幕左右分屏:

这边的代码实现敬请期待下一篇,本篇只讲原理,最简单设计用两个等大小surfaceView放置在屏幕左右两侧,然后实现一个视频文件两个场景同时播放,然后戴上vr眼睛也是有3D效果,不过缺少陀螺仪的视角转变。没有身临其境的感觉。这也就是普通视频文件和vr视频文件的区别。然后还有一点这样设计代码冗余性高,不效率。谷歌推出自己的vr三方。

vr视频文件还带有视频的拉伸压缩,以及全视角。不过一个普通的视频几百M,然而转变成vr后就一般是7G左右。这也是制约手机播放的因素,为什么?现在手机内存也就16G,可用一般9G,然后手机一般还放了自己的东西,哪有那内存,就算32G也经不住下载慢。所以这个问题大概很多vr眼睛拥有者都很苦恼。而找了很多vr视频播放软件又没功能,这个我自己是通过电脑来完成,目前我正在考虑自己的理想设计方案。

3.vr手柄的蓝牙手机操作:

蓝牙权限:

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

使用2.4G赫兹频率的无线电波,受干扰较小。路由器,无线鼠标键盘,通常是干扰对象,会降低信号的信噪比,但很少出现完全失效的情况。传输范围在10M左右实际传输速度在100kb+,,Android 2.0开始支持蓝牙,API6   调试时候需要真机,模拟器不行。

 

Android蓝牙开发:

权限 android.permission.BLUETOOTH 允许程序连接到已配对的蓝牙设备

android.permission.BLUETOOTH_ADMIN  允许程序发现和配对蓝牙设备

 

拿到本机蓝牙设备适配器: 通过判断非null来得知当前设备是否支持蓝牙

bluetoothAdapter= BluetoothAdapter.getDefaultAdapter();

 

查看蓝牙是否打开:

bluetoothAdapter.isEnabled()

 

打开蓝牙

// 1提示用户打开蓝牙,此方法会设置设备为“可发现”模式,默认120秒

                                    startActivityForResult(newIntent(

                                                      BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE).putExtra(

                                                                        bluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300),

                                                                        REQUEST_OPEN_BLUETOOTH);

// 2 提示用户打开蓝牙,此方法仅打开,不会改变蓝牙设备当前的可发现状态

startActivityForResult(newIntent( BluetoothAdapter.ACTION_REQUEST_ENABLE).putExtra(

                bluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300),

                  REQUEST_OPEN_BLUETOOTH);

 //3直接打开蓝牙

    bluetoothAdapter.enable();

打开设备为发现模式:

// 1提示用户设置为可发现模式

 startActivityForResult(new Intent( BluetoothAdapter.ACTION_REQUEST_ENABLE).putExtra(

                                   bluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300),

                                      REQUEST_OPEN_BLUETOOTH);

  //2直接打开为可发现模式

 bluetoothAdapter.startDiscovery();

关闭蓝牙: bluetoothadapter是单例的

BluetoothAdapteradapter=BluetoothAdapter.getDefaultAdapter();

                           adapter.disable();

 

判断是否正在扫描

bluetoothAdapter.isDiscovering()

 开始扫描蓝牙设备

bluetoothAdapter.startDiscovery();

 注册扫描发现设备的监听

BluetoothAdapter.ACTION_DISCOVERY_STARTED开始扫描

BluetoothDevice.ACTION_FOUND发现新设备

BluetoothAdapter.ACTION_DISCOVERY_FINISHED扫描结束

 在扫描到新设备的监听中,拿到这个设备

4.3D的图形效果制作:
通过Unity软件制作3D的图形效果(这里可以实现游戏的图案效果),与Android包交互中间会用到C#语言。同样的UE也可以支持GearVR和Google的DayDream,Google Developer Center里面有CardBoard的SDK直接调用WebGL的WebView的WebVR


以上纯属个人对vr的观点,可以会有错误的地方,欢迎大牛指出。反正个人对vr技术十分看好并对vr技术时刻关注



展开阅读全文

没有更多推荐了,返回首页