WebXR 應用程式生命週期

在本指南中,我們將對建立和驅動 WebXR 應用所涉及的內容有一個概覽,而不會深入到程式碼層面。這為 WebXR 指南後續的文章做準備,這些文章將涵蓋 啟動和關閉 WebXR 會話、幾何模擬攝像頭空間追蹤 等內容。

生命週期概述

大多數使用 WebXR 的應用都會遵循類似的整體設計模式。

  1. 檢查使用者的裝置和瀏覽器是否都能夠提供您想提供的 XR 體驗。

    1. 確保 WebXR API 可用;如果 navigator.xr 未定義,您可以假設使用者的瀏覽器和/或裝置不支援 WebXR。如果不支援,請停用用於啟用 XR 功能的任何使用者介面,並中止任何進入 XR 模式的嘗試。
    2. 呼叫 navigator.xr.isSessionSupported(),指定您想提供的 WebXR 體驗模式:inlineimmersive-vrimmersive-ar,以確定您希望提供的會話型別是否可用。
    3. 如果您想使用的會話型別可用,請向使用者提供適當的介面以允許他們啟用它。
  2. 當用戶透過與上面啟用的使用者介面互動來請求啟用 WebXR 功能時,使用所需的模式請求一個 XRSession。這是透過呼叫 navigator.xr.requestSession() 來完成的,同樣指定指示您想啟用的模式的字串:inlineimmersive-vrimmersive-ar

  3. 如果 requestSession() 返回的 Promise 解析,則使用新的 XRSession 在 WebXR 體驗期間管理 WebXR 會話。這將涉及管理輸入、動畫和渲染。

    1. 呼叫 XRSession 方法 requestAnimationFrame() 來排程 XR 裝置的第一個幀渲染。
    2. 如果您的場景很複雜,您應該考慮建立一個 Worker(或使用您之前為此目的建立的 Worker)來執行渲染每一幀所需的計算。這將減少渲染過程明顯示卡住應用的機率。
    3. 每個 requestAnimationFrame() 回撥都應該使用關於 3D 世界中物件的資訊來使用 WebGL 渲染幀。
    4. 每次呼叫回撥時,它都應該再次呼叫 requestAnimationFrame(),以便讓瀏覽器知道在渲染下一幀時需要再次執行回撥。
  4. 當時間到來時(例如,當用戶退出您的應用或離開您的網站時),結束 XR 會話;否則,繼續迴圈直到使用者選擇退出 XR 模式。

    1. 要自己結束 XR 會話,請呼叫 XRSession.end()
    2. 包含一個 XRSession 事件 end 事件的處理器,以便在會話結束時收到通知,無論會話是您的程式碼、使用者還是瀏覽器發起的終止。