GVR-Cardboard_DayDream
来源:互联网 发布:美工钢笔书法 编辑:程序博客网 时间:2024/05/17 04:43
google N 7.0的代码也发布了,抽空把之前的分析文档记录一下到博客~主要分析google在之前推出的VR SDK- CardBoard以及DayDream的结构组成,以及大体的运作流程
撰写不易,转载需注明出处:http://blog.csdn.net/jscese/article/details/52388325本文来自 【jscese】的博客!
概念
CardBoard:卡纸板,google早期推出的VR 开发集合,封装修改了Activity,GLSurfaceView 以及 Render等标准类的一层API,其中具体细致的实现封在so库中,用户使用CardBoard提供的jar包以及so,按照API的规则使用OPENGL实现特定函数即可开发VR程序
DayDream:白日梦,在CardBoard基础上的专业版,实现了更多的VR特性功能,如3D音效,全景视图,全景视频播放,控制器,封装的API和so也相应的增多,API更加有结构模块化。
CardBoard 结构分析
CardboardActivity
控制生命周期和初始化,应用的activity继承它就好,不需额外重写方法,特殊的操作CardboardActivity 中已做,activity还需要实现CardboardView.StereoRenderer回调接口:
public interface StereoRenderer { @UsedByNative void onNewFrame(HeadTransform var1); @UsedByNative void onDrawEye(Eye var1); @UsedByNative void onFinishFrame(Viewport var1); void onSurfaceChanged(int var1, int var2)void onSurfaceCreated(EGLConfig var1); void onRendererShutdown();}
CardboardActivity 继承android标准Activity的同时,实现SensorListener 的接口:
public interface SensorListener { void onInsertedIntoCardboard(CardboardDeviceParams var1); void onRemovedFromCardboard(); void onCardboardTrigger();}
这个SensorListener实现在cardboard.jar 包中com.google.vrtoolkit.cardboard.sensors ,获取hw 相关sensors event 触发回调
真正的实现交给到 cardboardView,由应用activity通过CardboardActivity 的setCardboardView(..)接口进行绑定
CardboardView
继承自GLSurfaceView, 有两种不同的renderer接口实现 通过cardboardViewApi往下设置直到配置到native层,返回Renderer 设置到GLSurfaceView中,
形成回调,由android GLSurfaceView引起的回调要先到native层中处理,再到activity中的具体实现,就是上面最先提到的activity中实现的StereoRenderer接口,封的一层renderer在:com.google.vrtoolkit.cardboard. CardboardViewNativeImpl 中的RendererHelper
CardboardViewApi
由上面的两个封装接口看来,最终的接口基本上是通过这个api类调用到native 库中去实现,包括sensor事件引起的view变化处理,activity的一些控制处理 等等
DayDream 结构分析
相对Cardboard ,可以理解为升级版,封装更为系统全面,功能更多,封装的包及库有:
com.google.vr.sdk.base – libgvrbase.so
com.google.vr.sdk.audio – libvraudio_engine.so
com.google.vr.sdk.controller
com.google.vr.sdk.widgets.common
com.google.vr.sdk.widgets.pano – libpanorenderer.so
com.google.vr.sdk.video – libpano_video_renderer.so
从包名就能看出主要的封装功能,同时每个往下也是调用对应的native库
包中详细接口含义可参考:https://developers.google.com/vr/android/reference_overview
原来的Carboard 相当于base的精简版,其它的都为新扩充
下载到的GVR-SDK 中的sample 使用gradle构建工程,可以分别看到扩充功能对android api的要求:
com.google.vr.sdk.controller – minSdkVersion 23
其它的 – minSdkVersion 19
封装的方式其实和Cardboard大同小异
CardboardActivity 换成了通用的GvrActivity
CardboardView 换成了 GvrView
cardboardViewApi 在延用,做了一些改变,扩充了一些接口
新增的封装功能有:
3D音乐
com.google.vr.sdk.audio.GvrAudioEngine
普通的加入方式,开个线程,加载source音乐文件startplay即可,控制往下的实现全封在vraudio_engine 库中
控制器
是以一个client 一个service 来进行通信,由com.google.vr.sdk.controller.ControllerManager
来管理connect statechange event等,应该是后续应用于控制交互,给的用例只是一个client程序,没看出怎么个效果, 这部分在现有的sdk中内容应该不全,连native库都没有,估计要等android N 之后才会看到完整的
全景视图
封装的VrPanoramaView,基于com.google.vr.sdk.widgets.common.VrWidgetView
VrPanoramaRenderer基于:com.google.vr.sdk.widgets.common.VrWidgetRenderer
首先loadImageFromBitmap 到VrPanoramaRenderer中,
由这两个Wiget类构建出基于sensor event 和Bitmap来 queueGlThreadEvent ,实时的图片内容绘制,起到一个全景的效果, 关键性的函数实现必然是 nativeXXX的
全景视频
封装处理结构基本类似上面的全景视图,上面是处理的 image ,这里换成了 video
提供两个load接口:本地:loadVideoFromAsset 网路:loadVideo(uri)
VrVideoPlayerInternal 来控制vedioplay
VrVideoView以及VrVideoRenderer结构基本雷同PanoramaXXX
- GVR-Cardboard_DayDream
- GVR心得
- GVR初探
- gvr-android-sdk 初探
- 【GVR】Google-VR
- GVR-SDK-Unity初体验
- [GVR]Google VR 工程导入
- Google Cardboard、 GVR Unity3D 开发
- gvr sdk for unity 开发笔记 - GazeInputModule解读
- 一、初识GVR ---- Android VR视频/Google VR for Android /VR Pano/VR Video
- 三、初识GVR ---- Android VR视频/Google VR for Android /VR Pano/VR Video
- Daydream VR入门基础教程,通过GVR示例SimpleVrPanorama制作VR全景图形应用
- 一、初识GVR ---- Android VR视频/Google VR for Android /VR Pano/VR Video
- Oracle:PL/SQL--PL/SQL声明及变量命名规则
- 阿里云服务器微信接口开发TOKEN验证失败
- Effective java 中的 继承和复合
- C#学习记录:委托
- 大话Docker
- GVR-Cardboard_DayDream
- DataStructure_3.List
- 数据库复习2
- php 截取去掉最后/第一个字符
- # 仿照微信类的图片上传,支持相册及拍照
- java 全栈高级工程师,架构师学习资源 交流
- 【动态规划】【缩点】NCPC 2014 G Outing
- java web 01 关于jsp页面的跳转的5种方式
- Linux命令练习第二关(7)