Microsoft Hololens开发上手(4)
磨刀不誤砍柴功,我們總有一些小工程師,不了解全貌,不好好思考,上手就開始寫代碼,這種做法是非常不可取的。對(duì)于Hololens的開發(fā)也是一樣。今天我們來(lái)重點(diǎn)看看Hololens里面的一些概念,比如Holograms, 坐標(biāo)系,還有Gaze。好吧,今天沒有demo的原因是因?yàn)镠ololens被借走了,沒法部署,仔細(xì)看看概念對(duì)開發(fā)也是非常非常非常重要的。
Hologram
Hololens可以讓你創(chuàng)建一個(gè)叫做Hologram的東西,它其實(shí)就是虛擬空間中的對(duì)象,由光和聲組成,就好像是真的東西一樣。這里吐槽一下,其實(shí)真正看到的還是有區(qū)別的,光影效果明顯不同。如果我們真的可以把虛擬的東西做得和真實(shí)的東西一樣,那不知道有多少人會(huì)變得神經(jīng)錯(cuò)亂。Hologram能夠?qū)ψ⒁?#xff08;Gaze),手勢(shì)(Gestures)和語(yǔ)音命令做出反應(yīng),當(dāng)然要通過寫代碼的方式。還可以和真實(shí)世界的表面進(jìn)行交互。我們可以放一個(gè)假的小狗在桌子上。帶上Hololens以后,它會(huì)把Holograms渲染在眼前,同時(shí)和你以及周圍環(huán)境交互。比如說(shuō),昨天我把這只小狗放在桌子的左上角,那下次我在運(yùn)行這個(gè)程序的時(shí)候,他可以記住我的房間和小狗位置,從而出現(xiàn)在同一個(gè)地方。這個(gè)功能叫Spatial Anchor。另外Holograms支持發(fā)出聲音,而且是聲音是帶方向和距離的,叫做Spatial Sound,晚點(diǎn)我們?cè)倬唧w看。
坐標(biāo)系
以下內(nèi)容涉及到高中數(shù)學(xué),如果不熟悉可以回去復(fù)習(xí)一下高中數(shù)學(xué)。所有的三維應(yīng)用程序都是使用笛卡爾坐標(biāo)系來(lái)描述物體的位置和方向,就是X, Y, Z軸。Hololens里有虛擬和實(shí)際的坐標(biāo)系統(tǒng),叫做空間坐標(biāo)系(Spatial Coordinate System)。其中定義的單位是米,也就是說(shuō)(0,0,0)到(1,1,1)的距離是1.732米,看不懂為什么的同學(xué)們以后就沒法輔導(dǎo)小孩的高中數(shù)學(xué)了,哈哈哈。hololens里使用的是右手坐標(biāo)系,也就是x朝右,y朝上,z超內(nèi)。
hololens支持2種參照系。一個(gè)是靜止參照系(stationary frame of reference),目的是為了保證holograms的位置相對(duì)不變,另外一個(gè)叫做附加參照系(Attached Frame of reference), 就是說(shuō)有些場(chǎng)景下需要讓holograms跟著人的移動(dòng)而移動(dòng),這些內(nèi)容叫body-locked content。簡(jiǎn)單而言,靜止參照系要解決的問題是,在程序啟動(dòng)的時(shí)候,你所在的位置是原點(diǎn),那么你可以把一個(gè)Hologram放在某個(gè)位置上,然后你站起來(lái),看著這個(gè)位置,不管你怎么移動(dòng),在眼鏡里看到的holograms的位置都不能移動(dòng),這需要hololens傳感器收集空間中的大量信息才能實(shí)現(xiàn),也是AR或者叫混合現(xiàn)實(shí)中最難做的部分之一。萬(wàn)一之前掃描的空間信息有誤差,那么會(huì)導(dǎo)致對(duì)象漂移(drift),這樣人看起來(lái)就會(huì)非常不真實(shí)。附加參照系比較簡(jiǎn)單,只要總是以眼鏡作為原點(diǎn)渲染holograms和原點(diǎn)對(duì)象的相對(duì)距離就可以了。
靜止參照系在編程模型中的解決方法叫做Spatial Anchor,翻譯成空間錨。Hololens會(huì)不斷掃描Spatial Anchor的位置以保證所有在Spatial Anchor坐標(biāo)系里的Holograms的位置都固定。我們舉個(gè)簡(jiǎn)單的例子,假設(shè)我們使用靜止參照系,把房間左側(cè)角落C1設(shè)為原點(diǎn)(0,0,0),右側(cè)角落C2(10,0,0),那么我分別分別放了2個(gè)Holograms在X1(2,0,0)和X2(8,0,0)的位置。這時(shí)候hololens的渲染會(huì)也很好,看上去也非常的完美。這時(shí)候使用者站起來(lái)在房間里到處走動(dòng),突然hololens傳感器發(fā)現(xiàn),從房間左側(cè)到房間右側(cè)的距離不是10米,而是9.9米,這時(shí)候c1和c2的距離變化會(huì)導(dǎo)致中間x1和x2的位置也變化了。那么在渲染x1和x2的時(shí)候,這個(gè)相對(duì)坐標(biāo)就可能變成了(1.9,0,0)和(7.9,0,0),這時(shí)holograms就會(huì)突然跳動(dòng)一下,位置變掉了,這會(huì)導(dǎo)致非常嚴(yán)重的問題。所以hololens的做法是在x1上放一個(gè)anchor, x2上也放一個(gè)anchor。無(wú)論hololens如何移動(dòng),這兩個(gè)anchor的位置是不會(huì)移動(dòng)的,那么相對(duì)于anchor 1坐標(biāo)系里的對(duì)象1和anchor2坐標(biāo)系里的對(duì)象2,他們的相對(duì)坐標(biāo)都不會(huì)變動(dòng),也就不會(huì)出現(xiàn)holograms位置突然變化的情況了。好吧,簡(jiǎn)而言之就是在環(huán)境中多設(shè)置幾個(gè)原點(diǎn),讓相對(duì)位置不變化,這都要依賴于hololens的硬件足夠強(qiáng)大,萬(wàn)一spatial mapping有bug的話,還是解決不了這個(gè)問題的。
Spatial anchor的位置可以保存或者共享,這樣下次程序在相同房間里面運(yùn)行起來(lái),那么holograms還可以在老地方出現(xiàn),還可以把位置共享給其他人,他們也可以在相同位置看到一樣的東西。當(dāng)然還是那句話,要保證hololens能斷定是相同的房間,如果傳感器被擋住了,環(huán)境中人來(lái)人往或者家具被移動(dòng)了位置,或者在另外一個(gè)一模一樣的房間里面,都可以讓hololens失去方向。
附加參照系比較簡(jiǎn)單,距離和方向也相對(duì)固定,當(dāng)用戶移動(dòng)或轉(zhuǎn)動(dòng)頭部的時(shí)候,內(nèi)容也會(huì)跟著走。當(dāng)hololens不知道自己在哪里的時(shí)候,就只會(huì)渲染基于附加參照系的holograms,比如告訴用戶你丟了,不知道在哪的通知框(Fallback UI)可以基于這種附加參照系來(lái)構(gòu)造,所有的應(yīng)用程序都需要提供這種功能。另外還有一種叫”Head-Locked content",就是無(wú)論hololens怎么改變,這個(gè)東西都不會(huì)變。比如Gaze里面的中間那個(gè)點(diǎn)。這個(gè)東西極度不推薦,因?yàn)闀?huì)讓人很不舒服。
關(guān)于坐標(biāo)系的內(nèi)容,具體可以參考https://developer.microsoft.com/en-us/windows/holographic/coordinate_systems
Gaze
Gaze就是看,讓hololens知道當(dāng)前正在看的是哪個(gè)hologram或者是實(shí)際的對(duì)象,就好比鼠標(biāo)移動(dòng)到哪個(gè)位置。可以想象成有個(gè)激光掃到某個(gè)對(duì)象,這個(gè)對(duì)象就被選中了。這個(gè)一帶而過,大家可以再?gòu)?fù)習(xí)一下坐標(biāo)系的概念。
?
轉(zhuǎn)載于:https://www.cnblogs.com/hotcan/articles/5629070.html
總結(jié)
以上是生活随笔為你收集整理的Microsoft Hololens开发上手(4)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人体姿态估计算法之open pose
- 下一篇: 用 Python+openpose 实现