1. 程式人生 > >Android手機與vr互動暴風魔鏡3D效果顯示原理

Android手機與vr互動暴風魔鏡3D效果顯示原理

首先講到VR,談談個人體會,半年前看到淘寶上的vr眼鏡盒為了促銷標題圖片都是非常性感的,還有海量你懂得資源。到最近在淘寶搜尋vr暴風魔鏡都正規了,而且銷售量龐大

還有新聞上很多vr的科技前沿資訊可以看出來。vr技術隨時間的流逝正在日益發展成熟,就像曾經的諾基亞到安卓,蘋果。可以說vr技術現在還未成熟,但是具有強大的潛力價值。

----眼睛的呈像原理:

人眼視覺的立體感和空間的距離感時如何產生的?

人有兩隻眼睛看到的事物有疊加的部分,而角度又不完全相同。兩眼得到的是有細微差別的不同影象,在大腦中得到的影象就有了立體感,即能夠分辨出距離,大腦通過對兩個影像的處理感知距離和空間。
立體電影就是根據這個原理:拍攝時用兩臺攝影機離開一定距離同步拍攝,放映時兩臺放影機同步放映兩部電影,且運用偏光鏡將左右兩部電影的光設定成不同的偏振方式。觀看者戴上特製的偏光眼鏡,讓兩眼分別看到不同的放映機光線,在大腦中就得到了強烈的立體影象。

做一個很簡單的測試,閉上你一隻眼睛,去摸一個放在桌子上鉛筆的筆尖,很難摸到,因為單眼得到的影象沒有立體感,只能憑經驗來區別。


-----接下來談談VR:

虛擬現實頭戴顯示器裝置,簡稱VR頭顯VR眼鏡,手機螢幕只有一個,而我們卻有兩個眼睛,又必須要讓左、右眼所看的影象同步且各自獨立分開,才能有立體視覺。所以看vr電影最基本的條件就是將手機螢幕分屏,然後通過兩個鏡片,左右眼得到同樣的影象資訊,消除雙眼視角重疊帶來的分離感,從而取代了看到前方是距離很近的顯示屏的感覺。

還有就是手機的感測器,目前vr視訊播放會使用手機的陀螺儀等重力感測器實現視訊播放過程周圍視角的隨角度轉變,如同真正意義上的看頭轉動看周圍及身後。這就是身臨其境的效果實現原理,但是這些視訊由於360度的效果往往記憶體巨大,常見的vr視訊為全景和左右視角。



-----未來前景:

主機平臺現在有一類遊戲,以高畫質劇情體驗為主,操作非常簡單,俗稱“遊戲電影化”。目前VR圈也有很大一部分人在嘗試VR電影的製作,但是基於360°視訊的拍攝手法在VR的沉浸感並不是很好,而且傳統的電影拍攝手法也不適合VR視訊製作。所以,電腦製作的3D動畫類電影在VR化方面具有先天優勢,再結合VR頭顯的一些輸入特性,甚至會產生“電影遊戲化”的產品。另一方面,以UE4為代表的遊戲引擎,實時渲染的畫面效果已經達到了CG級別,在技術上具備了製作實時渲染電影的能力。可以預見到,未來的VR互動電影與VR遊戲,它們之間的邊界會變得十分模糊。

老實說,當vr技術開發完善後,手機的3D遊戲將真正實現身臨其境的感覺。當然身臨其境的恐怖喪屍類的遊戲將只會是勇敢者才敢嘗試的禁區。對於手機遊戲將會有巨大的改變,對手機日常應用也將讓商品購物變成立體的。

所以說vr技術完善的那天將會有多麼巨大的改變。vr有巨大的潛力市場。

不過現在還有幾大問題:手機電量的限制,手機散熱措施不完善,長時間視訊觀看有時導致大腦暈眩,近距離是否會對眼睛造成損害嗎,大型3D手機執行記憶體問題(這個手機升級中將不再是問題)等。這是我的個人看法。

-----前面是vr的介紹,現在來點乾貨:

1、vr的陀螺儀感測器等:

SENSOR_TYPE_ACCELEROMETER 1 //加速度  
  
SENSOR_TYPE_MAGNETIC_FIELD 2 //磁力  
  
SENSOR_TYPE_ORIENTATION 3 //方向  
  
SENSOR_TYPE_GYROSCOPE 4 //陀螺儀  
  
SENSOR_TYPE_LIGHT 5 //光線感應  
  
SENSOR_TYPE_PRESSURE 6 //壓力  
  
SENSOR_TYPE_TEMPERATURE 7 //溫度  
  
SENSOR_TYPE_PROXIMITY 8 //接近  
  
SENSOR_TYPE_GRAVITY 9 //重力  
  
SENSOR_TYPE_LINEAR_ACCELERATION 10//線性加速度  
  
SENSOR_TYPE_ROTATION_VECTOR 11//旋轉向量  

對於螢幕播放視角的控制。陀螺儀有些舊手機沒有這功能。而且vr的軟體版本要求較高。

2.vr的手機螢幕左右分屏:

這邊的程式碼實現敬請期待下一篇,本篇只講原理,最簡單設計用兩個等大小surfaceView放置在螢幕左右兩側,然後實現一個視訊檔案兩個場景同時播放,然後戴上vr眼睛也是有3D效果,不過缺少陀螺儀的視角轉變。沒有身臨其境的感覺。這也就是普通視訊檔案和vr視訊檔案的區別。然後還有一點這樣設計程式碼冗餘性高,不效率。谷歌推出自己的vr三方。

vr視訊檔案還帶有視訊的拉伸壓縮,以及全視角。不過一個普通的視訊幾百M,然而轉變成vr後就一般是7G左右。這也是制約手機播放的因素,為什麼?現在手機記憶體也就16G,可用一般9G,然後手機一般還放了自己的東西,哪有那記憶體,就算32G也經不住下載慢。所以這個問題大概很多vr眼睛擁有者都很苦惱。而找了很多vr視訊播放軟體又沒功能,這個我自己是通過電腦來完成,目前我正在考慮自己的理想設計方案。

3.vr手柄的藍芽手機操作:

藍芽許可權:

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

使用2.4G赫茲頻率的無線電波,受干擾較小。路由器,無線滑鼠鍵盤,通常是干擾物件,會降低訊號的信噪比,但很少出現完全失效的情況。傳輸範圍在10M左右實際傳輸速度在100kb+,,Android 2.0開始支援藍芽,API6   除錯時候需要真機,模擬器不行。

Android藍芽開發:

許可權 android.permission.BLUETOOTH 允許程式連線到已配對的藍芽裝置

android.permission.BLUETOOTH_ADMIN  允許程式發現和配對藍芽裝置

拿到本機藍芽裝置介面卡: 通過判斷非null來得知當前裝置是否支援藍芽

bluetoothAdapter= BluetoothAdapter.getDefaultAdapter();

檢視藍芽是否開啟:

bluetoothAdapter.isEnabled()

開啟藍芽

// 1提示使用者開啟藍芽,此方法會設定裝置為“可發現”模式,預設120秒

                                    startActivityForResult(newIntent(

                                                      BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE).putExtra(

                                                                        bluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300),

                                                                        REQUEST_OPEN_BLUETOOTH);

// 2 提示使用者開啟藍芽,此方法僅開啟,不會改變藍芽裝置當前的可發現狀態

startActivityForResult(newIntent( BluetoothAdapter.ACTION_REQUEST_ENABLE).putExtra(

                bluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300),

                  REQUEST_OPEN_BLUETOOTH);

 //3直接開啟藍芽

    bluetoothAdapter.enable();

開啟裝置為發現模式:

// 1提示使用者設定為可發現模式

 startActivityForResult(new Intent( BluetoothAdapter.ACTION_REQUEST_ENABLE).putExtra(

                                   bluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300),

                                      REQUEST_OPEN_BLUETOOTH);

  //2直接開啟為可發現模式

 bluetoothAdapter.startDiscovery();

關閉藍芽: bluetoothadapter是單例的

BluetoothAdapteradapter=BluetoothAdapter.getDefaultAdapter();

                           adapter.disable();

判斷是否正在掃描

bluetoothAdapter.isDiscovering()

 開始掃描藍芽裝置

bluetoothAdapter.startDiscovery();

 註冊掃描發現裝置的監聽

BluetoothDevice.ACTION_FOUND發現新裝置

BluetoothAdapter.ACTION_DISCOVERY_FINISHED掃描結束

 在掃描到新裝置的監聽中,拿到這個裝置

4.3D的圖形效果製作:
通過Unity軟體製作3D的圖形效果(這裡可以實現遊戲的圖案效果),與Android包互動中間會用到C#語言。同樣的UE也可以支援GearVR和Google的DayDream,Google Developer Center裡面有CardBoard的SDK直接呼叫WebGL的WebView的WebVR

以上純屬個人對vr的觀點,可以會有錯誤的地方,歡迎大牛指出。反正個人對vr技術十分看好並對vr技術時刻關注