您的位置:首页 > 移动开发 > Android开发

一起学Google Daydream VR开发,快速入门开发基础教程二:Android端开发环境配置二

2017-02-17 17:50 1046 查看

开始部署

上篇介绍了开发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清单文件:[html] view plain copy print?



<?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>


<?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的,看看用到了哪些库:[html] view plain copy print?



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’
}


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.Ster
bc73
eoRenderer接口:为所有委托立体渲染细节视图渲染。因为他们通常不使用提供的转换参数实现者应该简单地呈现视图。所有的立体渲染和失真校正的细节与渲染抽象和视图内部管理。
GvrView:可用于VR渲染,GvrView渲染立体声内容。

TreasureHuntActivity的布局文件是common_ui.xml,里面只有一个控件GvrView,再看看初始化代码:[html] view plain copy print?



<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”/>


<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"/>
[html] view plain copy print?



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); }


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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android
相关文章推荐