本文章主要參考Google VR中的文檔,如果您能流利的讀懂英文開發文檔,可以去 官網 自行檢視。
1.介紹VR View
VR view allows you to embed 360 degree VR media into websites on desktop and mobile, and native apps on Android and iOS. This technology is designed to enable developers of traditional apps to enhance the apps with immersive content.
VR視圖允許你将360度的VR媒體嵌入桌面和移動的網站,以及Android和iOS上的原生應用。這項技術旨在使傳統應用程式的開發者能夠通過沉浸式的内容來增強應用程式。
VR view supports mono and stereo 360 images and videos. Images and video need to be stored in the equirectangular-panoramic (equirect-pano) format, which is a common format supported by many capture solutions.
VR視圖支援mono和立體圖像和視訊。圖像和視訊需要存儲在equi矩形-全景(equirect - pano)格式中,這是許多捕獲解決方案支援的公共格式。
Image規格
- VR檢視圖像可以儲存為PNG,JPEG或GIF。Google建議使用JPEG改進壓縮。
- 為了獲得最大的相容性和性能,圖像尺寸應該是2的倍數(例如,2048或4096)。
- 單個圖像應為2:1縱橫比(例如4096×2048)。
- 立體圖像應為1:1縱橫比(例如4096×4096)。
Mono單個圖像 | Stereo立體圖像 |
---|---|
![]() | |
先來看看效果:
項目運作效果圖
2.使用 VrPanoramaView
嵌入全景圖像
VrPanoramaView
1.build.gradle
在app下的
build.gradle
中添加panowidget庫
dependencies {
compile 'com.google.vr:sdk-panowidget:1.10.0'
}
2.AndroiManifest.xml
在使用VrPanoramaView的Acitivity的intent-filter節點添加過濾分類:
com.google.intent.category.CARDBOARD
: 相容Cardboard紙盒
<activity android:name=".VrPanoramaActivity" >
<intent-filter>
<category android:name="com.google.intent.category.CARDBOARD" />
</intent-filter>
</activity>
3.布局檔案
隻需在布局中添加一個控件
<com.google.vr.sdk.widgets.pano.VrPanoramaView
android:id="@+id/pano_view"
android:layout_margin="5dip"
android:layout_width="match_parent"
android:scrollbars="@null"
android:layout_height="250dip" />
4.加載全景圖
A.初始化控件
VrPanoramaView vrPanView = (VrPanoramaView) findViewById(R.id.vr_pan_view);
B.讀取圖檔
我們提前将一張選擇好的全景圖放在assets目錄中,aa.jpg,将圖檔轉為bitmap
/**擷取assets中的圖檔,轉為流**/
InputStream open = null;
try {
open = getAssets().open("aa.jpg");
} catch (IOException e) {
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(open);
C.設定VrPanoramaView.Options
/**VrPanoramaView.Options 設定**/
VrPanoramaView.Options options = new VrPanoramaView.Options();
options.inputType = VrPanoramaView.Options.TYPE_MONO;
VrPanoramaView.Options有兩種類型:
-
TYPE_MONO 360度單圖(2:1縱橫比)
圖像被預期以覆寫沿着其水準軸360度,而垂直範圍是根據圖像的寬高比來計算。例如,如果一個1000x250像素的圖像,給出所述全景将覆寫360x90度與垂直範圍是-45至+45度。
-
TYPE_STEREO_OVER_UNDER 立體圖(1:1縱橫比)
包含兩個大小相等的投影 全景圖垂直疊加。頂部圖像被顯示給左眼、底部圖像被顯示給右眼。圖像将覆寫沿水準軸360度,而垂直範圍是根據圖像的寬高比來計算。例如,如果一個1000x500像素的圖像中給出(即1000x250像素每個眼睛),全景将覆寫360x90度與垂直範圍是-45至+45度。
D.加載全景圖
vrPanView.loadImageFromBitmap(bitmap, options);
E.設定加載監聽VrPanoramaEventListener
/**設定加載圖檔監聽**/
vrPanView.setEventListener(new VrPanoramaEventListener() {
/**
* 顯示模式改變回調
* 1.預設
* 2.全屏模式
* 3.VR觀看模式,即橫屏分屏模式
*/
@Override
public void onDisplayModeChanged(int newDisplayMode) {
super.onDisplayModeChanged(newDisplayMode);
Log.d(TAG, "onDisplayModeChanged()->newDisplayMode=" + newDisplayMode);
}
/**
* 加載VR圖檔失敗回調
*/
@Override
public void onLoadError(String errorMessage) {
super.onLoadError(errorMessage);
Log.d(TAG, "onLoadError()->errorMessage=" + errorMessage);
}
/**
* 加載VR圖檔成功回調
*/
@Override
public void onLoadSuccess() {
super.onLoadSuccess();
Log.d(TAG, "onLoadSuccess->圖檔加載成功");
}
/**
* 點選VR圖檔回調
*/
@Override
public void onClick() {
super.onClick();
Log.d(TAG, "onClick()");
}
});
F.在onPause、onResume、onDestroy中做出相應處理
@Override
protected void onPause() {
super.onPause();
vrPanView.pauseRendering();//暫停3D渲染和跟蹤
}
@Override
protected void onResume() {
super.onResume();
vrPanView.resumeRendering();//恢複3D渲染和跟蹤
}
@Override
protected void onDestroy() {
vrPanView.shutdown();//關閉渲染下并釋放相關的記憶體
super.onDestroy();
}
G.一些其他方法
//是否隐藏左下角資訊的按鈕
vrPanView.setInfoButtonEnabled(boolean enabled);
//是否隐藏全屏按鈕
vrPanView.setFullscreenButtonEnabled(boolean enabled);
未完,如果遇到新的繼續添加
最後附上完整代碼:
VrPanoramaActivity.java本文作者: shijiacheng
本文連結:
http://shijiacheng.studio/2017/06/30/first-RecyclerView/版權聲明: 本部落格所有文章除特别聲明外,均為原創文章。請尊重勞動成果,轉載注明出處!
轉載請注明:轉自
http://shijiacheng.studio