Mozilla工程師展示如何將WebGL應(yīng)用移植到WebVR

    VR/AR
    2018
    09/15
    13:34
    87870
    分享
    評論

    在數(shù)個(gè)月前,我將一款Pathfinder演示應(yīng)用程序移植到WebVR。那是一次有趣的經(jīng)歷,而我感覺自己在將WebGL應(yīng)用移植到WebVR的過程中學(xué)到了一推事情。我認(rèn)為這些經(jīng)驗(yàn)教訓(xùn)應(yīng)該會(huì)對大家有所幫助,尤其是缺乏Web編程經(jīng)驗(yàn)的WebVR新人。

    Pathfinder是一款用Rust語言編寫的基于GPU的字體光柵化器,它包含一個(gè)在服務(wù)器端運(yùn)行Rust代碼的演示應(yīng)用程序,但都在TypeScript網(wǎng)站的WebGL中完成所有的GPU工作。

    我們有一個(gè)展示Mozilla Monument的3D演示作品,將其作為演示3D文本光柵化的一種方式。我希望做的事情是將其轉(zhuǎn)換為WebVR應(yīng)用程序,支持你通過移動(dòng)頭部來瀏覽紀(jì)念碑,而非使用鍵盤的方向鍵。

    我在著手研究這個(gè)問題的時(shí)候相當(dāng)熟悉OpenGL和WebGL,但對VR或WebVR幾乎沒有任何知識(shí)背景。三年前我編寫了一個(gè)Android Cardboard應(yīng)用程序,但也就僅此而已。

    我希望這篇文章能夠?yàn)轭愃频拈_發(fā)者提供幫助。

    1。 什么是WebVR

    WebVR是一組用于在Web上編寫VR應(yīng)用程序的API。它允許我們請求跳轉(zhuǎn)到VR模式,這時(shí)我們就可以直接將影像渲染到VR顯示器,而不是渲染到平面瀏覽器。當(dāng)用戶使用Cardboard或Daydream等設(shè)備時(shí),用戶需要將智能手機(jī)塞進(jìn)頭顯之中。

    WebVR API有助于切換至或離開VR模式,獲取姿態(tài)信息,在VR中渲染,以及處理設(shè)備輸入。新的WebXR Device API規(guī)范正在對一系列的事項(xiàng)進(jìn)行優(yōu)化。

    2。 我需要什么設(shè)備來支持WebVR嗎?

    理想情況下,一款優(yōu)秀的VR設(shè)備可以更容易地測試你的工作,但根據(jù)你需要的分辨率,Daydream或Cardboard已經(jīng)足夠。你甚至可以在沒有頭顯的情況下進(jìn)行測試,不過畫面看起來會(huì)很怪異和出現(xiàn)扭曲。

    對于本地測試,Chrome提供了一個(gè)非常有用的WebVR API模擬擴(kuò)展。你可以使用其中的開發(fā)者工具面板來調(diào)整姿態(tài),而且你可以獲得無扭曲的顯示。

    火狐支持WebVR,而在啟動(dòng)一定的flag情況下,Chrome Canary同樣予以支持。這個(gè)polyfill應(yīng)該能兼容更多的瀏覽器。

    3。 工作原理

    我認(rèn)為在我開始的時(shí)候,不理解這部分內(nèi)容是我產(chǎn)生許多困惑和錯(cuò)誤的根源。API的核心基本上是“將某些內(nèi)容渲染到畫布,然后再變出魔術(shù)”,而我當(dāng)時(shí)無法確定魔法是如何產(chǎn)生。

    基本上,有一些我們應(yīng)該做的事情,然后瀏覽器(或polyfill)同樣有一些額外的工作需要完成。

    一旦我們進(jìn)入VR模式,只要設(shè)備請求幀,就會(huì)觸發(fā)回調(diào)。在這個(gè)回調(diào)中,我們可以訪問姿態(tài)信息。利用姿態(tài)信息,我們可以確定每只眼睛應(yīng)該看到的內(nèi)容,并以某種形式將其提供給WebVR API。

    WebVR API期望的事情是,我們將每個(gè)眼睛的視圖渲染至畫布,水平分割(當(dāng)我們初始化它時(shí),這個(gè)畫布將傳遞給API)。這是我們這一邊要做的事情,然后瀏覽器(或polyfill)完成剩下的工作。它將使用我們渲染的畫布作為紋理,并且對于每只眼睛,它會(huì)扭曲渲染的一半以適當(dāng)?shù)厥褂迷O(shè)備中的透鏡。例如,Daydream和Cardboard的扭曲遵循這個(gè)polyfill中的代碼。

    值得注意的是,作為應(yīng)用程序開發(fā)者,我們不必?fù)?dān)心這一點(diǎn),因?yàn)閃ebVR API將會(huì)為我們處理它。我們只需要將每只眼睛的未扭曲視圖渲染至畫布,左邊視圖到左半邊,右邊視圖到右半邊,而瀏覽器將處理其余的視圖。

    4。 移植WebGL應(yīng)用

    webvr.info和MDN提供了一些很好的資源。webvr.info有一堆簡潔的樣本,如果你像我一樣,搗鼓它們能夠幫助你更好地學(xué)習(xí)。

    4.1 進(jìn)入VR模式

    首先,我們需要訪問VR顯示器并進(jìn)入VR模式:

    進(jìn)入VR本身:

    現(xiàn)在我們已經(jīng)進(jìn)入VR,下一步是什么?在上面的代碼片段中,我們有一個(gè)render()調(diào)用,它正在完成大部分的艱苦工作。由于我們從一個(gè)現(xiàn)有的WebGL應(yīng)用程序開始,我們已經(jīng)有了這樣的功能:

    這看起來很好,但請注意我們是為雙眼渲染相同的影像,而且根本沒有處理頭部運(yùn)動(dòng)。為了實(shí)現(xiàn)這一點(diǎn),我們需要使用WebVR從VRFrameData對象提供的透視圖和視圖矩陣。

    VRFrameData對象包含一個(gè)姿態(tài)構(gòu)件,其中包含所有頭部姿態(tài)信息(位置,方向,甚至是速度和加速度)。但為了在渲染時(shí)正確定位camera,VRFrameData提供了我們可以直接使用的投影和視圖矩陣。我們可以這樣做:

    在圖形中,我們經(jīng)常發(fā)現(xiàn)我們需要處理模型,視圖和投影矩陣。模型矩陣定義了我們希望在空間坐標(biāo)中渲染的對象位置,視圖矩陣定義了camera空間和世界空間之間的變換,而投影矩陣則處理剪輯空間和camera空間之間的變換。有時(shí)候我們會(huì)處理其中一些組合,比如“模型-視圖”矩陣。

    你可以在webvr.info的立體渲染示例中看到立方體群代碼使用這些矩陣。

    我們的應(yīng)用程序很可能已經(jīng)具備模型/視圖/投影矩陣的概念。如果沒有,我們可以在頂點(diǎn)著色器中使用視圖矩陣預(yù)乘我們的位置。我們的代碼看起來將是這樣:

    這應(yīng)該能解決問題。現(xiàn)在移動(dòng)頭部應(yīng)該能觸發(fā)場景中的移動(dòng)。你可以通過這個(gè)演示應(yīng)用程序看到代碼的應(yīng)用,它是利用本文提及的技術(shù)來將一個(gè)旋轉(zhuǎn)三角形WebGL應(yīng)用程序轉(zhuǎn)換為WebVR兼容的三角形瀏覽應(yīng)用程序。

    如果我們有進(jìn)一步的輸入,我們可能需要使用Gamepad API來設(shè)計(jì)一個(gè)適用于典型VR控制器的VR界面,但這超出了本文的范圍。

    來源:87870

    THE END
    廣告、內(nèi)容合作請點(diǎn)擊這里 尋求合作
    VR
    免責(zé)聲明:本文系轉(zhuǎn)載,版權(quán)歸原作者所有;旨在傳遞信息,不代表砍柴網(wǎng)的觀點(diǎn)和立場。

    相關(guān)熱點(diǎn)

    近日,Adobe 宣布將在明天的荷蘭廣播電視展(IBC)上推出新一代視頻工具,以實(shí)現(xiàn)更無縫的視頻編輯過程。Adobe表示,將全面支持VR180度內(nèi)容。
    VR
    近日,看到科技正式推出全球首個(gè)8K 3D全景VR直播系統(tǒng)。同時(shí),看到科技還宣布已獲得富士康投資,雙方將聯(lián)合打造8K VR全景的生態(tài)系統(tǒng)。
    VR
    迪士尼動(dòng)畫的首部VR短片《Cycles》于上月的SIGGRAPH大會(huì)上進(jìn)行了首映,這部短片只有三分鐘,但卻向我們展示了一個(gè)家庭在50年里的酸甜苦辣。
    VR
    隨著經(jīng)濟(jì)的飛速發(fā)展,快節(jié)奏的生活大大增加了人們在工作和生活上的壓力,因此心理健康問題也頻頻出現(xiàn)。近日,EvolVR利用VR來尋找一種鍛煉身體和心靈的方法,以放松身心。
    VR
    近日,Psytec Games開發(fā)的第一人稱冒險(xiǎn)類VR游戲《Windlands》宣布登陸Oculus Rift。
    VR
    最新文章

    相關(guān)推薦

    1
    3
    主站蜘蛛池模板: 色噜噜狠狠一区二区三区果冻| 欧美日本精品一区二区三区 | 日本一区二区三区在线视频| 精品久久久中文字幕一区| 国产精品一区二区毛卡片| 波多野结衣精品一区二区三区| 少妇一晚三次一区二区三区| 成人精品一区久久久久| 久久亚洲中文字幕精品一区 | 日韩电影一区二区| 91福利视频一区| 日韩一区二区三区不卡视频| 一区二区三区在线观看免费 | 人妻体内射精一区二区三区| 中字幕一区二区三区乱码 | 成人精品一区二区不卡视频| 精品乱码一区内射人妻无码| 伊人激情AV一区二区三区| 国产一区在线mmai| 视频一区在线播放| 久久亚洲一区二区| 国产精品无码一区二区三区在 | 日本大香伊一区二区三区| 任你躁国语自产一区在| 国产精品亚洲一区二区无码 | 亚洲一区爱区精品无码| 亚洲日韩一区二区三区| 国产一区二区三区在线影院| 国产美女一区二区三区| 夜色阁亚洲一区二区三区| 亚洲国产精品自在线一区二区 | 国产精品视频无圣光一区| 精品人妻一区二区三区毛片| 精品亚洲AV无码一区二区三区| 国产成人免费一区二区三区| 成人无码AV一区二区| 精品无码综合一区二区三区| 亚洲国产精品乱码一区二区 | 国产亚洲福利精品一区二区 | 国产主播在线一区| 中文字幕无码一区二区免费|