Android VR入门文章
来源:互联网 发布:西斯托 fm数据 编辑:程序博客网 时间:2024/05/29 10:42
android官方给出了两种VR实现方式CardBoard和DayDream。
这两种有什么区别呢?
白日梦是高质量,移动虚拟现实的平台。在主页上方官方也描述它为:低延迟,身临其境的,互动的移动VR的新平台。
它对硬件的要求也是比较高的,你可以通过Daydream controller和它交互
那么CardBoard:
纸板可以让你在负担得起的情况下,体验一个简单,有趣的虚拟现实。在主页上方官方也描述它为:是世界上最流行的和方便的移动VR平台(可能是经济成本低吧)
google提供了sdk来简化vr的开发。他们提供的sdk,cardBoard和DayDream都支持。网址参考这里
同时google也提供了相关的demo,供我们参考,https://github.com/googlevr/gvr-android-sdk
里面包含的demo如下:
demo很简单,都是通过java实现的,google Vr网站 都有讲解这些demo。
sdk-simplepanowidget:实现了全景照片。
关键代码很简单:
在布局中加入
<com.google.vr.sdk.widgets.pano.VrPanoramaView android:id="@+id/pano_view" android:layout_margin="5dip" android:layout_width="match_parent" android:scrollbars="@null" android:layout_height="250dip" />
然后通过方法
VrPanoramaView.loadImageFromBitmap()
就可以实现了。该方法的具体说明可以看google vr api
播放全景视频和显示全景图片流程非常类似
<com.google.vr.sdk.widgets.video.VrVideoView android:id="@+id/video_view" android:layout_width="match_parent" android:scrollbars="@null" android:layout_height="250dip"/>
然后再代码中调用
loadVideoFromAsset or loadVideo.
loadVideo加载网络视频
loadVideoFromAsset 从asset文件夹下加载视频。
VR寻宝游戏demo,sdk-treasurehunt:
寻宝游戏中主要api介绍:
GvrActivity:是android中开发VR的基类,你写的VR程序要继承它,它使你能够更简单的集成Google VR,然后它也暴露出了很多和VR环境交互的方法,同时帮你处理了很多细节,当渲染VR的时候。
寻宝游戏具体详细内容,google官网有介绍。
我主要说两个方法:
onNewFrame和onDrawEye
onNewFrame:左右眼视图渲染出来之前调用的,它有个参数是HeadTransform表示脑袋的Transform,可以在这个函数中获取脑袋的位置信息,然后在之后可以使用它。
demo中关于这块的代码:
/** * Prepares OpenGL ES before we draw a frame. * * @param headTransform The head transformation in the new frame. */ @Override public void onNewFrame(HeadTransform headTransform) { Log.d("wang","onNewFrame"); setCubeRotation(); // Build the camera matrix and apply it to the ModelView. Matrix.setLookAtM(camera, 0, 0.0f, 0.0f, CAMERA_Z, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); headTransform.getHeadView(headView, 0); // Update the 3d audio engine with the most recent head rotation. headTransform.getQuaternion(headRotation, 0); gvrAudioEngine.setHeadRotation( headRotation[0], headRotation[1], headRotation[2], headRotation[3]); // Regular update call to GVR audio engine. gvrAudioEngine.update(); checkGLError("onReadyToDraw"); }
onDrawEye:这个方法就是渲染左右眼视图内容的一个回调方法。
运行demo的时候,打log发现onNewFrame在onDrawEye之前调用,而且是如下方式打印: D/wang: onNewFrame
07-19 12:24:57.591 29829-32402/com.google.vr.sdk.samples.treasurehunt D/wang: onDrawEye com.google.vr.sdk.base.Eye@b500d7c
07-19 12:24:57.591 29829-32402/com.google.vr.sdk.samples.treasurehunt D/wang: onDrawEye com.google.vr.sdk.base.Eye@f19b605
07-19 12:24:57.601 29829-32402/com.google.vr.sdk.samples.treasurehunt D/wang: onNewFrame
07-19 12:24:57.601 29829-32402/com.google.vr.sdk.samples.treasurehunt D/wang: onDrawEye com.google.vr.sdk.base.Eye@b500d7c
07-19 12:24:57.601 29829-32402/com.google.vr.sdk.samples.treasurehunt D/wang: onDrawEye com.google.vr.sdk.base.Eye@f19b605
从log中可以看出onDrawEye被调用了两次,猜测是左眼视图渲染一次,然后右眼视图渲染一次。
总结:
android开发全景图片和视频还是很容易的,基本都是现成的东西,就一个控件一个方法就搞定了。
如果是做游戏或界面类的应用,就麻烦了,因为需要使用openGL来开发,openGL写游戏绝对是比较复杂的。
所以一般如果是开发应用类界面或游戏一般都用unity来实现,android有开放给unity的sdk,用unity开发就比openGL简单多了。所以现在开发VR很多人都是用unity开发。
- Android VR入门文章
- VR入门
- VR 入门
- Android 入门系列文章
- Android入门的一篇文章
- VR入门01
- VR入门02
- VR入门03
- VR入门04
- VR入门笔记一
- vr的入门
- VR一些优秀博客文章
- [Android第三方类库]greenDAO入门文章
- cocos2dx 入门 android 系列文章地址
- android 入门-进阶 必看 文章
- VR、AR、MR 概念入门
- Android-VR 支持流媒体
- Android VR 简单开发
- VS编译时output/Errorlist窗口自动弹出设置
- 抓取豆瓣某本书的评论
- 流程控制语句
- Java中 printf、print、println的区别
- java多线程详解
- Android VR入门文章
- 【代码笔记】iOS-字体从右向左滚动
- 单向散列函数SHA-1算法分析与实现
- dubbo源码解析(三): Socket Server和方法调用
- PHP 伪静态规则写法RewriteRule-htaccess详细语法使用
- hadoop MapReduce 输出结果中文乱码解决
- 【loj】#6004. 「网络流 24 题」圆桌聚餐(二分图匹配)
- JAVASE jar文件的打开---Win7
- 求质数算法之试除法