Skip to main content
 首页 » 资源教程

Daydream从入门到精通教程二:Android端开发环境配置二

2016年11月18日 15:26:011010Jaiky_杰哥

开始部署

上篇介绍了开发Daydream Android VR需要的基本环境,这篇我们来看看如何部署和运用官方示例。

--------------------------------------------------------------------------------------------------------------------

Daydream快速入门开发基础教程一:Android端开发环境配置一

http://www.chinaar.com/ZYJC/3718.html

--------------------------------------------------------------------------------------------------------------------

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

 Daydream从入门到精通教程二:Android端开发环境配置二 资源教程 第1张

可以看到有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模拟器客户端。

如果需要了解寻宝游戏的实现方式,可以查看:

Daydream从入门到精通教程二:Android端开发环境配置二 资源教程 第2张

 

 

运行了解Demo项目

 

将手机连接到计算机,运行寻宝游戏,开始在手机上编译和运行应用程序。

开始出现第一界面:

Daydream从入门到精通教程二:Android端开发环境配置二 资源教程 第3张

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

Daydream从入门到精通教程二:Android端开发环境配置二 资源教程 第4张

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

打开samples-sdk-treasurehunt,我们来看看是如何开发一个VR程序,首先是Manifest清单文件:

[html] view plain copy

<?xmlversion="1.0"encoding="utf-8"?>

  1. <manifestxmlns:android="http://schemas.android.com/apk/res/android"

  2.           package="com.google.vr.sdk.samples.treasurehunt"

  3.           android:version\="1"

  4.           android:version\="1">

  5.  

  6.     <uses-permissionandroid:name="android.permission.INTERNET"/>

  7.     <uses-permissionandroid:name="android.permission.NFC"/>

  8.     <uses-permissionandroid:name="android.permission.VIBRATE"/>

  9.     <uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>

  10.  

  11.     <!-- Make accelerometer and gyroscope hard requirements for good head tracking. -->

  12.     <uses-featureandroid:name="android.hardware.sensor.accelerometer"android:required="true"/>

  13.     <uses-featureandroid:name="android.hardware.sensor.gyroscope"android:required="true"/>

  14.  

  15.     <uses-sdkandroid:minSdkVersion="19"android:targetSdkVersion="22"/>

  16.     <uses-featureandroid:glEsVersion="0x00020000"android:required="true"/>

  17.  

  18.     <!-- VR feature tags. -->

  19.     <uses-featureandroid:name="android.software.vr.mode"android:required="false"/>

  20.     <uses-featureandroid:name="android.hardware.vr.high_performance"android:required="false"/>

  21.  

  22.     <application

  23.             android:allowBackup="true"

  24.             android:supportsRtl="true"

  25.             android:icon="@drawable/ic_launcher"

  26.             android:label="@string/app_name">

  27.         <activity

  28.                 android:name=".TreasureHuntActivity"

  29.                 android:label="@string/app_name"

  30.                 android:screenOrientation="landscape"

  31.                 android:con\="orientation|keyboardHidden|screenSize">

  32.             <intent-filter>

  33.                 <actionandroid:name="android.intent.action.MAIN"/>

  34.                 <categoryandroid:name="android.intent.category.LAUNCHER"/>

  35.                 <categoryandroid:name="com.google.intent.category.CARDBOARD"/>

  36.             </intent-filter>

  37.         </activity>

  38.     </application>

  39.  

  40. </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的,看看用到了哪些库:

[html] view plain copy

dependencies {  

  1.     compile project(':libraries-audio')  

  2.     compile project(':libraries-base')  

  3.     compile project(':libraries-common')  

  4.  

  5.     compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7'  

  6. }  

对照最上面的,可以了解到分别用到了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,再看看初始化代码:

[html] view plain copy

<com.google.vr.sdk.base.GvrView

  1.         android:id="@+id/gvr_view"

  2.         android:layout_width="fill_parent"

  3.         android:layout_height="fill_parent"

  4.         android:layout_alignParentLeft="true"

  5.         android:layout_alignParentTop="true"/>

[html] view plain copy

public void onCreate(Bundle savedInstanceState) {  

  1.     super.onCreate(savedInstanceState);  

  2.     setContentView(R.layout.common_ui);  

  3.     GvrView gvrView = (GvrView) findViewById(R.id.gvr_view);  

  4.     // 将 gvrView和GvrView.StereoRenderer 关联  

  5.     gvrView.setRenderer(this);  

  6.     // 将 gvrView和当前activity 关联 .  

  7.     setGvrView(gvrView);  

  8.     }  

够简单吧!官方介绍GvrView.StereoRenderer 有两个主要的方法:

onNewFrame():每次应用程序呈现时间/一个新的帧被绘制到屏幕上。

onDrawEye():每只眼睛眼睛不同的参数。

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

评论列表暂无评论
发表评论