VR开发基础—全景图
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VR开发基础—全景图相关的知识,希望对你有一定的参考价值。
1、导入谷歌官方提供的库:
commonwidget、common、panowidget(全景图)、videowidget(视频)
或者添加依赖:
dependencies {
compile project(‘:libraries-common‘)
compile project(‘:libraries-commonwidget‘)
compile project(‘:libraries-panowidget‘)
}
版本要求:
<uses-sdkandroid:minSdkVersion="19"android:targetSdkVersion="22"/>
2、配置清单文件:
<uses-permissionandroid:name="android.permission.INTERNET"/> <uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/> <applicationandroid:label="SimpleVrPanoramaActivity" android:largeHeap="true" android:theme="@android:style/Theme.Holo.Light"> <activityandroid:name=".SimpleVrPanoramaActivity"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> <categoryandroid:name="com.google.intent.category.CARDBOARD"/> </intent-filter> </activity> </application>
3、布局加载 全景资源(图片)控件
<com.google.vr.sdk.widgets.pano.VrPanoramaView android:id="@+id/picView" android:layout_width="match_parent" android:layout_height="match_parent"> </com.google.vr.sdk.widgets.pano.VrPanoramaView>
4、初始化控件以及监控加载事件
publicclassSimpleVrPanoramaActivityextendsActivity { privatestaticfinalString TAG ="VrPanorama"; privateVrPanoramaViewpanoWidgetView;//上面说的Google提供给我们现实全景图片的View privateString fileUri ="first.jpg";//assets文件夹下的文件名 privateOptionspanoOptions =newOptions();//VrPanoramaView需要的设置 privateImageLoaderTask backgroundImageLoaderTask;//异步加载图片 @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); panoWidgetView =(VrPanoramaView) findViewById(R.id.pano_view);//初始化VrPanoramaView panoWidgetView.setEventListener(newActivityEventListener());//为VrPanoramaView添加监听 //如果有任务在执行则停止它 if(backgroundImageLoaderTask !=null) { backgroundImageLoaderTask.cancel(true); } //设置inputType 为TYPE_STEREO_OVER_UNDER. panoOptions.inputType =Options.TYPE_STEREO_OVER_UNDER; //创建一个任务 backgroundImageLoaderTask =newImageLoaderTask(); //执行任务。将图片名(根据项目实际情况传)和设置传入 backgroundImageLoaderTask.execute(Pair.create(fileUri, panoOptions)); } //异步任务 classImageLoaderTaskextendsAsyncTask<Pair<String,Options>,Void,Boolean>{ @Override protectedBoolean doInBackground(Pair<String,Options>... fileInformation) { InputStream istr =null; try { istr = getAssets().open(fileInformation[0].first);//获取图片的输入流 Bitmap bitmap =BitmapFactory.decodeStream(istr);//创建bitmap //参数一为图片的bitmap,参数二为 VrPanoramaView 所需要的设置 panoWidgetView.loadImageFromBitmap(bitmap, fileInformation[0].second); } catch(IOException e) { Log.e(TAG,"Could not decode default bitmap: "+ e); returnfalse; } finally { try{ istr.close();//关闭InputStream } catch(IOException e) { //...} } returntrue; } } privateclassActivityEventListenerextendsVrPanoramaEventListener{ @Override publicvoid onLoadSuccess() { //图片加载成功 Log.e(TAG,"onLoadSuccess"); } @Override publicvoid onLoadError(String errorMessage) { //图片加载失败 Log.e(TAG,"Error loading pano: "+ errorMessage); } @Override publicvoid onClick() { //当我们点击了VrPanoramaView 时候出发 super.onClick(); Log.e(TAG,"onClick"); } @Override publicvoid onDisplayModeChanged(int newDisplayMode) { //改变显示模式时候出发(全屏模式和纸板模式) super.onDisplayModeChanged(newDisplayMode); Log.e(TAG,"onDisplayModeChanged"); } } @Override protectedvoid onPause() { panoWidgetView.pauseRendering();//暂停3D渲染和跟踪 super.onPause(); } @Override protectedvoid onResume() { super.onResume(); panoWidgetView.resumeRendering();//恢复3D渲染和跟踪 } @Override protectedvoid onDestroy() { panoWidgetView.shutdown();//关闭渲染下并释放相关的内存 if(backgroundImageLoaderTask !=null) { backgroundImageLoaderTask.cancel(true);//停止异步任务 } super.onDestroy(); } }
5、界面其他元素设置:
setFullscreenButtonEnabled (false);//隐藏全屏模式按钮
setVrModeButtonEnabled(false);//隐藏VR模式按钮
vrImage.setInfoButtonEnabled(false);//隐藏信息按钮
6、Options参数:
①public static final int TYPE_MONO = 1;
- 图像被预期以覆盖沿着其水平轴360度,而垂直范围是根据图像的宽高比来计算。
-
例如,如果一个1000x250像素的图像,给出所述全景将覆盖360x90度与垂直范围是-45至+45度
②public static final int TYPE_STEREO_OVER_UNDER = 2;
-
包含两个大小相等的投影 全景图垂直叠加。顶部图像被显示给左眼、底部图像被显示给右眼
- 图像将覆盖沿水平轴360度,而垂直范围是根据图像的宽高比来计算。
- 例如,如果一个1000x500像素的图像中给出(即1000x250像素/每个眼睛),全景将覆盖360x90度与垂直范围是-45至+45度。
以上是关于VR开发基础—全景图的主要内容,如果未能解决你的问题,请参考以下文章
Daydream VR入门基础教程,学习Google VR for Android全景应用示例SimpleVrPanorama制作VR全景应用