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.VrPanoramaViewandroid: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.VrVideoViewandroid: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.*/@Overridepublic 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入门文章相关推荐

  1. Android Volley入门到精通:初识Volley的基本用法

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...

  2. 《图说VR入门》——DeepoonVR的大鹏(陀螺仪)枪

    <图说VR入门>--VR大朋的(陀螺仪)枪 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/ar ...

  3. android设置webview缓存目录,Android基础入门教程——7.5.5 WebView缓存问题

    Android基础入门教程--7.5.5 WebView缓存问题 Android基础入门教程 本节引言:现在很多门户类信息网站,比如虎嗅,ifanr,钛媒体等等的APP,简单点说是信息阅读类的APP, ...

  4. Android新手入门,怎样才是正确的学习方式

    对于android新手入门,遇到的学习瓶颈和困难是无限大的,新手入门,没有一个好学的学习方向,没有一个学习规划,更多的则是在百度上搜索,查阅相关资料,如果没有辅导,纯粹就是瞎摸索.百度上面搜索资料,更 ...

  5. Android WebRTC 入门教程(一) -- 使用相机

    前言,最近在搞网页投屏,发现 WebRTC 的Android 版本较少,这里的话,参考了一些优秀的博客,主要是这个大佬的 https://www.jianshu.com/p/eb5fd116e6c8 ...

  6. google vr 入门之VrPanoramaView制作全景图列表,apm应用性能管理

    思路就是这么简单,这里的全景图我们需要对应的全景图控件来显示,google vr 中有对应的全景图控件VrPanoramaView,google vr 的核心是其父类VrWidgetView,VrPa ...

  7. Android自定义控件入门到精通--Region区域

    <Android自定义控件入门到精通>文章索引 ☞ https://blog.csdn.net/Jhone_csdn/article/details/118146683 <Andro ...

  8. 《图说VR入门》——googleVR 他山之玉

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/53125482 作者:car ...

  9. Android自定义控件三部曲文章索引

    前言:在我从C++转到Android时,就被Android里炫彩斑斓的自定义控件深深折服,想知道如果想利用C++实现这些功能,那是相当困难的.从那时候起,我就想,等我学会了自定义控件,一定要写一篇系列 ...

最新文章

  1. 安装eAccelerator
  2. Clojure入门指南(Getting Started)
  3. [Dubbo实战]dubbo + zookeeper + spring 实战 (转)
  4. zbb20171013 mysql服务重启 重启服务 重启mysql服务
  5. 实现一行或多行文字溢出隐藏显示省略号
  6. 网站设计中程序员和美工的配合问题
  7. java 注解: Annotation
  8. 浅谈嵌入式系统的持续集成
  9. Android每日一记
  10. 数据库设计系列[04]组织结构加入权限系统
  11. lamp环境搭建之配置apache与fpm方式的php
  12. 超像素分割算法SLIC的matlab实现
  13. 山东理工大学oj打字速度测试
  14. 买书不读是一种什么病?
  15. cpu功耗排行_AMD、Intel CPU处理器性能、功耗及性价比排行(更新中)
  16. 阿里巴巴校招笔试题整理
  17. 计算机不学c语言的专业,关于高职计算机类专业学生学不好C语言的思考
  18. 手机上PDF怎么编辑?这个办公APP必须装!
  19. 前高管苏箐离职,原因或在于他的“杀人”言论同样对华为自身不利
  20. 小白都能看懂 XAMPP的下载安装配置详细教程(含拒绝访问坑)

热门文章

  1. C++基础入门(超详细)
  2. 2021最新MySQL数据库面试题
  3. python编码问题——“utf-8”与“gbk”
  4. ctp交易接口股票怎么查询历史数据?
  5. 全国程序员高考卷,开始答题!
  6. 小飞鱼通达二开 解决通达OA数据库服务不能启动的问题(图文)
  7. java1000字节是多少汉字_面试官:Java 中有几种基本数据类型是什么?各自占用多少字节?...
  8. 艺赛旗(RPA)解压缩文件
  9. ESP32-C3入门教程 IoT篇⑦——微软云 Microsoft Azure 物联网 IoT Central EspAzureIoT 实战
  10. Django教程:第一个Django应用程序(1部分)