首页 > 代码库 > Daydream从入门到精通——快速入门开发基础教程二:Android端开发环境配置二

Daydream从入门到精通——快速入门开发基础教程二:Android端开发环境配置二

开始部署

上篇介绍了开发Daydream Android VR需要的基本环境,这篇我们来看看如何部署和运用官方示例。
--------------------------------------------------------------------------------------------------------------------
Daydream快速入门开发基础教程一:Android端开发环境配置一
http://blog.csdn.net/jaikydota163/article/details/52647876
--------------------------------------------------------------------------------------------------------------------

打开Android Studio。在Android Studio的欢迎界面,选择打开现有的Android Studio项目,“Open an existing Android Studio project”,或者在运行界面,选中File —— Open,然后选择示例源码gvr-android-sdk解压目录。 导入后Android Studio将在左侧的“项目”选项卡上显示各个gradle模块,并在顶部工具栏上显示各个运行目标,如图2所显示。
技术分享

可以看到有4个可运行的sample项目,和7个依赖库,7个依赖库是创建Android VR的核心,他们分别是:
 ●  com.google.vr.sdk.base : Google VR API的核心代码。
 ●  com.google.vr.sdk.common : Google VR API的公共代码。
 ●  com.google.vr.sdk.audio  : 3D空间化声音的代码。
 ●  com.google.vr.sdk.controller : 用于在VR应用程序中使用Daydream控制器的代码。
 ●  com.google.vr.sdk.widgets.common : 用于嵌入VR视图内容的共享代码。
 ●  com.google.vr.sdk.widgets.pano : VR全景视图代码。
 ●  com.google.vr.sdk.widgets.video : VR视图视频小部件的代码。
如果需要了解这些代码的API,可以查看:https://developers.google.com/vr/android/reference_overview

4个可运行的sample APP,分别是:
 ●  samples-simplepanowidget: 提供简单全景视图组件例子。
 ●  samples-treasurehunt: 寻宝小游戏例子。
 ●  samples-simplevideowidget:提供简单视图视频组件例子。
 ●  samples-controllerclient: Daydream控制器App模拟器客户端。
如果需要了解寻宝游戏的实现方式,可以查看:https://developers.google.com/vr/android/samples/treasure-hunt
技术分享

运行了解Demo项目

将手机连接到计算机,运行寻宝游戏,开始在手机上编译和运行应用程序。
开始出现第一界面:
技术分享

可以放入Cardboard纸盒,也可以不放入会自动开始主程序:
技术分享

一个简单得不能再简单的VR小游戏,如果购买了Daydream控制器可以连接使用,也可以用另一个手机下载控制器模拟APP,模拟控制器来使用。表示没控制器的情况下玩半天不知道在玩什么,后来取下Cardboard点击立方体,立方体会消失,并且会反馈震动提示找到宝藏了.........好吧,看来我们这个Demo实在是有点太简单了,不过我们也不需要它太复杂,主要是通过了解这个Demo的代码,了解如何快速开发出Daydream的VR程序。

打开samples-sdk-treasurehunt,我们来看看是如何开发一个VR程序,首先是Manifest清单文件:
 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.google.vr.sdk.samples.treasurehunt"
          android:versionCode="1"
          android:versionName="1">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.NFC" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <!-- Make accelerometer and gyroscope hard requirements for good head tracking. -->
    <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true"/>
    <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"/>

    <uses-sdk android:minSdkVersion="19" android:targetSdkVersion="22"/>
    <uses-feature android:glEsVersion="0x00020000" android:required="true" />

    <!-- VR feature tags. -->
    <uses-feature android:name="android.software.vr.mode" android:required="false"/>
    <uses-feature android:name="android.hardware.vr.high_performance" android:required="false"/>

    <application
            android:allowBackup="true"
            android:supportsRtl="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name">
        <activity
                android:name=".TreasureHuntActivity"
                android:label="@string/app_name"
                android:screenOrientation="landscape"
                android:configChanges="orientation|keyboardHidden|screenSize" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="com.google.intent.category.CARDBOARD" />
            </intent-filter>
        </activity>
    </application>

</manifest>

可以看到主要用到的权限:
 ●  android.permission.INTERNET : 获取网络权限
 ●  android.permission.NFC : 获取NFC权限(貌似没体现到啊)。
 ●  android.permission.VIBRATE  : 振动权限。
 ●  android.permission.READ_EXTERNAL_STORAGE  : 读取拓展内容。
没什么好说的,基本都是一些常用的权限,需要用到的硬件设备:
 ●  android.hardware.sensor.accelerometer : 加速度传感器
 ●  android.hardware.sensor.gyroscope : 水平陀螺仪
也没什么好说的,VR必备的硬件设备,intent-filter过滤分类:
 ●  com.google.intent.category.CARDBOARD :兼容Cardboard纸盒

打开寻宝游戏treasurehunt的build.gradle的,看看用到了哪些库
dependencies {
    compile project(‘:libraries-audio‘)
    compile project(‘:libraries-base‘)
    compile project(‘:libraries-common‘)

    compile ‘com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7‘
}
对照最上面的,可以了解到分别用到了GVR核心代码,公共代码,和音频。
至于com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7,很明显不是依赖的GVR的库了,是从jcenter的获取,没网的同学部署的时候gradle这里是通不过的。protobuf-javanano是一套序列化数据结构的方案,通常用于编写需要数据交换或者需要存储数据的程序,这个是用于Android移动设备的Nano版本,相比原来的版本,去掉了一些复杂的特性,所生成的代码更加小巧、简单,更加适用于移动设备。

接下来了解项目的主Acitivty,也就是TreasureHuntActivity:
我们发现TreasureHuntActivity是继承了GvrActivity(GvrActivity在com.google.vr.sdk.base包下)实现了GvrView.StereoRenderer接口(StereoRenderer在com.google.vr.sdk.base.GvrView下)。

GvrActivity:是使用谷歌VR SDK制作应用程序的起点。GvrActivity是base activity,提供与谷歌轻松集成虚拟现实设备。它暴露事件的VR环境进行交互和处理了许多创造VR渲染一个活动时通常需要的细节。
GvrView.StereoRenderer接口:为所有委托立体渲染细节视图渲染。因为他们通常不使用提供的转换参数实现者应该简单地呈现视图。所有的立体渲染和失真校正的细节与渲染抽象和视图内部管理。
GvrView:可用于VR渲染,GvrView渲染立体声内容。


TreasureHuntActivity的布局文件是common_ui.xml,里面只有一个控件GvrView,再看看初始化代码:
<com.google.vr.sdk.base.GvrView
        android:id="@+id/gvr_view"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"/>
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.common_ui);
    GvrView gvrView = (GvrView) findViewById(R.id.gvr_view);
    // 将 gvrView和GvrView.StereoRenderer 关联
    gvrView.setRenderer(this);
    // 将 gvrView和当前activity 关联 .
    setGvrView(gvrView);
    }

够简单吧!官方介绍GvrView.StereoRenderer 有两个主要的方法:
onNewFrame():每次应用程序呈现时间/一个新的帧被绘制到屏幕上。
onDrawEye():每只眼睛眼睛不同的参数

Demo内容就介绍这么多了,其他的自己摸索,主要都是些关于OpenGL的东西,学过OpenGL的同学会有一定的优势,没学过的也可以或多或少的去了解下OpenGL的API,接下来的blog我将讲解下如何创建自己的第一个Daydream应用程序。

一起探讨

Daydream相关学习技术交流群,有什么最新的技术和教程以及VR开发工具等会第一时间在群内发布,欢迎广大VR爱好者的加入:
①群号:418310684
点击加入DayDream群:技术分享


声明

欢迎转载,但请保留文章原始出处
作者:Jaiky_杰哥 
出处:http://blog.csdn.net/jaikydota163/article/details/52729869

Daydream从入门到精通——快速入门开发基础教程二:Android端开发环境配置二