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

0 0
原创粉丝点击