Microsoft Hololens開發上手(4)


磨刀不誤砍柴功,我們總有一些小工程師,不了解全貌,不好好思考,上手就開始寫代碼,這種做法是非常不可取的。對於Hololens的開發也是一樣。今天我們來重點看看Hololens里面的一些概念,比如Holograms, 坐標系,還有Gaze。好吧,今天沒有demo的原因是因為Hololens被借走了,沒法部署,仔細看看概念對開發也是非常非常非常重要的。

Hologram

Hololens可以讓你創建一個叫做Hologram的東西,它其實就是虛擬空間中的對象,由光和聲組成,就好像是真的東西一樣。這里吐槽一下,其實真正看到的還是有區別的,光影效果明顯不同。如果我們真的可以把虛擬的東西做得和真實的東西一樣,那不知道有多少人會變得神經錯亂。Hologram能夠對注視(Gaze),手勢(Gestures)和語音命令做出反應,當然要通過寫代碼的方式。還可以和真實世界的表面進行交互。我們可以放一個假的小狗在桌子上。帶上Hololens以后,它會把Holograms渲染在眼前,同時和你以及周圍環境交互。比如說,昨天我把這只小狗放在桌子的左上角,那下次我在運行這個程序的時候,他可以記住我的房間和小狗位置,從而出現在同一個地方。這個功能叫Spatial Anchor。另外Holograms支持發出聲音,而且是聲音是帶方向和距離的,叫做Spatial Sound,晚點我們再具體看。

坐標系

以下內容涉及到高中數學,如果不熟悉可以回去復習一下高中數學。所有的三維應用程序都是使用笛卡爾坐標系來描述物體的位置和方向,就是X, Y, Z軸。Hololens里有虛擬和實際的坐標系統,叫做空間坐標系(Spatial Coordinate System)。其中定義的單位是米,也就是說(0,0,0)到(1,1,1)的距離是1.732米,看不懂為什么的同學們以后就沒法輔導小孩的高中數學了,哈哈哈。hololens里使用的是右手坐標系,也就是x朝右,y朝上,z超內。

hololens支持2種參照系。一個是靜止參照系(stationary frame of reference),目的是為了保證holograms的位置相對不變,另外一個叫做附加參照系(Attached Frame of reference), 就是說有些場景下需要讓holograms跟着人的移動而移動,這些內容叫body-locked content。簡單而言,靜止參照系要解決的問題是,在程序啟動的時候,你所在的位置是原點,那么你可以把一個Hologram放在某個位置上,然后你站起來,看着這個位置,不管你怎么移動,在眼鏡里看到的holograms的位置都不能移動,這需要hololens傳感器收集空間中的大量信息才能實現,也是AR或者叫混合現實中最難做的部分之一。萬一之前掃描的空間信息有誤差,那么會導致對象漂移(drift),這樣人看起來就會非常不真實。附加參照系比較簡單,只要總是以眼鏡作為原點渲染holograms和原點對象的相對距離就可以了。

靜止參照系在編程模型中的解決方法叫做Spatial Anchor,翻譯成空間錨。Hololens會不斷掃描Spatial Anchor的位置以保證所有在Spatial Anchor坐標系里的Holograms的位置都固定。我們舉個簡單的例子,假設我們使用靜止參照系,把房間左側角落C1設為原點(0,0,0),右側角落C2(10,0,0),那么我分別分別放了2個Holograms在X1(2,0,0)和X2(8,0,0)的位置。這時候hololens的渲染會也很好,看上去也非常的完美。這時候使用者站起來在房間里到處走動,突然hololens傳感器發現,從房間左側到房間右側的距離不是10米,而是9.9米,這時候c1和c2的距離變化會導致中間x1和x2的位置也變化了。那么在渲染x1和x2的時候,這個相對坐標就可能變成了(1.9,0,0)和(7.9,0,0),這時holograms就會突然跳動一下,位置變掉了,這會導致非常嚴重的問題。所以hololens的做法是在x1上放一個anchor, x2上也放一個anchor。無論hololens如何移動,這兩個anchor的位置是不會移動的,那么相對於anchor 1坐標系里的對象1和anchor2坐標系里的對象2,他們的相對坐標都不會變動,也就不會出現holograms位置突然變化的情況了。好吧,簡而言之就是在環境中多設置幾個原點,讓相對位置不變化,這都要依賴於hololens的硬件足夠強大,萬一spatial mapping有bug的話,還是解決不了這個問題的。

Spatial anchor的位置可以保存或者共享,這樣下次程序在相同房間里面運行起來,那么holograms還可以在老地方出現,還可以把位置共享給其他人,他們也可以在相同位置看到一樣的東西。當然還是那句話,要保證hololens能斷定是相同的房間,如果傳感器被擋住了,環境中人來人往或者家具被移動了位置,或者在另外一個一模一樣的房間里面,都可以讓hololens失去方向。

附加參照系比較簡單,距離和方向也相對固定,當用戶移動或轉動頭部的時候,內容也會跟着走。當hololens不知道自己在哪里的時候,就只會渲染基於附加參照系的holograms,比如告訴用戶你丟了,不知道在哪的通知框(Fallback UI)可以基於這種附加參照系來構造,所有的應用程序都需要提供這種功能。另外還有一種叫”Head-Locked content",就是無論hololens怎么改變,這個東西都不會變。比如Gaze里面的中間那個點。這個東西極度不推薦,因為會讓人很不舒服。

關於坐標系的內容,具體可以參考https://developer.microsoft.com/en-us/windows/holographic/coordinate_systems

Gaze

Gaze就是看,讓hololens知道當前正在看的是哪個hologram或者是實際的對象,就好比鼠標移動到哪個位置。可以想象成有個激光掃到某個對象,這個對象就被選中了。這個一帶而過,大家可以再復習一下坐標系的概念。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM