美文网首页
浅析《Google Android VR》开发基础—全景图

浅析《Google Android VR》开发基础—全景图

作者: 一个不掉头发的开发 | 来源:发表于2017-09-13 20:15 被阅读277次

    最近项目需要,花了一段时间去研究这门技术。发现随着VR设备的流行开来,各大招聘平台上也发布了不少关于andorid VR开发相关的Android工程师岗位,从这点来说掌握VR在项目中的实际应用要点,有助于大家为自己的开发经验上增加前沿技术的积累。
    经过研发市面上的主流vr app 的功能,抽取并整合项目中的vr开发知识点,希望大家掌握后,在企业相关vr app游刃有余。

    1. 全景图片显示

    GIF.gif

    2. 导入全景图相关的三个开发库

    commonwidget、common、panowidget(全景图)、videowidget(视频)
    
    PS:最新的SDK已经没有这三个文件夹了,使用下一步的依赖库即可

    2.1 或者添加依赖

    compile 'com.google.vr:sdk-panowidget:1.30.0'
    //compile project(':common')
    //compile project(':commonwidget')
    //compile project(':panowidget')
    //google的一套序列化数据结构开发库
    //compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-7'
    
    PS:版本要求:<usessdkandroid:minSdkVersion="19"android:targetSdkVersion="22"/>

    2.3 配置清单文件

    <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>
    
    PS:android:largeHeap="true" 全景图片比较耗资源

    2.4 准备全景图片测试资源

    放在assets目录 例:assets/img.jpg
    

    3 布局加载 全景资源(图片)控件

    <com.google.vr.sdk.widgets.pano.VrPanoramaView
        android:id="@+id/picView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    

    4 初始化控件以及监控加载事件

    package com.fw.dagger.vr;
    
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.text.TextUtils;
    
    import com.google.vr.sdk.widgets.pano.VrPanoramaView;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    public class MainActivity extends AppCompatActivity {
        public VrPanoramaView vrPanoramaView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            vrPanoramaView = findViewById(R.id.vrPanoramaView);
            vrPanoramaView.setTouchTrackingEnabled(true);
            vrPanoramaView.setFullscreenButtonEnabled(true);
            vrPanoramaView.setInfoButtonEnabled(false);
            vrPanoramaView.setStereoModeButtonEnabled(false);
    
            VrPanoramaView.Options options = new VrPanoramaView.Options();
            options.inputType = VrPanoramaView.Options.TYPE_MONO;
            vrPanoramaView.loadImageFromBitmap(getBitmapFromAssets("timg.jpg"), options);
        }
    
        private Bitmap getBitmapFromAssets(String fileName) {
            if (TextUtils.isEmpty(fileName)) return null;
            try {
                InputStream inputStream = getAssets().open(fileName);
                return BitmapFactory.decodeStream(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            vrPanoramaView.resumeRendering();
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            vrPanoramaView.pauseRendering();
        }
    
        @Override
        protected void onDestroy() {
            vrPanoramaView.shutdown();
            super.onDestroy();
        }
    }
    
    

    5 界面其他元素设置:

    • setFullscreenButtonEnabled (false);//隐藏全屏模式按钮
    • setVrModeButtonEnabled(false);//隐藏VR模式按钮
    • vrImage.setInfoButtonEnabled(false);//隐藏信息按钮

    6 Options参数:

    1. public static final int TYPE_MONO = 1;
      图像被预期以覆盖沿着其水平轴360度,而垂直范围是根据图像的宽高比来计算。
      例如,如果一个1000x250像素的图像,给出所述全景将覆盖360x90度与垂直范围是-45至+45度
    2. public static final int TYPE_STEREO_OVER_UNDER = 2;
      包含两个大小相等的投影 全景图垂直叠加。顶部图像被显示给左眼、底部图像被显示给右眼
      图像将覆盖沿水平轴360度,而垂直范围是根据图像的宽高比来计算。
      例如,如果一个1000x500像素的图像中给出(即1000x250像素/每个眼睛),全景将覆盖360x90度与垂直范围是-45至+45度。

    最终效果

    微信图片_20170913200025.jpg
    Google文章:https://code.tutsplus.com/tutorials/getting-started-with-android-vr-through-google-cardboard-panoramic-images--cms-27653
    GitHub:https://github.com/ZQ330093887/VR

    相关文章

      网友评论

          本文标题:浅析《Google Android VR》开发基础—全景图

          本文链接:https://www.haomeiwen.com/subject/nyulsxtx.html