WebVR API
已棄用:此特性不再推薦。雖然某些瀏覽器可能仍然支援它,但它可能已經從相關的網路標準中刪除,可能正在刪除過程中,或者可能僅為相容性目的而保留。請避免使用它,如果可能,請更新現有程式碼;請參閱本頁底部的相容性表格以指導您的決策。請注意,此特性可能隨時停止工作。
非標準:此特性未標準化。我們不建議在生產環境中使用非標準特性,因為它們瀏覽器支援有限,並且可能會更改或被移除。但是,在沒有標準選項的特定情況下,它們可以是合適的替代方案。
注意: WebVR API 已被 WebXR API 取代。WebVR 從未被批准為標準,在少數瀏覽器中預設實現和啟用,並支援少量裝置。
WebVR 為將虛擬現實裝置(例如,Oculus Rift 或 HTC Vive 等頭戴式顯示器)暴露給 Web 應用程式提供了支援,使開發人員能夠將顯示器的位置和運動資訊轉換為 3D 場景中的運動。這有許多有趣的應用程式,從虛擬產品參觀和互動培訓應用程式到沉浸式第一人稱遊戲。
概念與用法
連線到您計算機的任何 VR 裝置都將透過 Navigator.getVRDisplays() 方法返回;每個裝置都將由一個 VRDisplay 物件表示。

VRDisplay 是 WebVR API 中的核心介面——透過其屬性和方法,您可以訪問以下功能:
- 檢索有用的資訊,以幫助我們識別顯示器、其功能、與之關聯的控制器等。
- 為要顯示在顯示器中的每一幀內容檢索幀資料,並以一致的速率提交這些幀進行顯示。
- 開始和停止向顯示器呈現內容。
一個典型的(簡單)WebVR 應用程式將像這樣工作:
Navigator.getVRDisplays()用於獲取 VR 顯示器的引用。VRDisplay.requestPresent()用於開始向 VR 顯示器呈現內容。- WebVR 專用的
VRDisplay.requestAnimationFrame()方法用於以顯示器正確的重新整理率執行應用程式的渲染迴圈。 - 在渲染迴圈中,您獲取顯示當前幀所需的資料 (
VRDisplay.getFrameData()),將顯示的場景繪製兩次——一次用於每隻眼睛的檢視,然後將渲染的檢視提交給顯示器以顯示給使用者 (VRDisplay.submitFrame())。
此外,WebVR 1.1 在 Window 物件上添加了許多事件,允許 JavaScript 響應顯示器狀態的變化。
注意:您可以在我們的 使用 WebVR API 和 WebVR 概念文章中找到更多關於 API 工作原理的資訊。
API 可用性
WebVR API 從未被批准為網路標準,已被棄用,取而代之的是 WebXR API,後者正在順利完成標準化過程。因此,您應該嘗試更新現有程式碼以使用新的 API。通常,轉換應該相當順利。
此外,在某些裝置和/或瀏覽器上,WebVR 要求頁面透過 HTTPS 連線在安全上下文中載入。如果頁面不完全安全,WebVR 方法和函式將不可用。您可以透過檢查 Navigator 方法 getVRDisplays() 是否為 NULL 來輕鬆測試這一點。
if (!navigator.getVRDisplays) {
console.error("WebVR is not available");
} else {
/* Use WebVR */
}
使用控制器:將 WebVR 與 Gamepad API 結合使用
許多 WebVR 硬體設定都配有與頭戴式裝置配套的控制器。這些控制器可以透過 Gamepad API,特別是 Gamepad Extensions API 在 WebVR 應用程式中使用,後者增加了用於訪問控制器姿態、觸覺反饋器等 API 功能。
注意:我們的 將 VR 控制器與 WebVR 結合使用文章解釋瞭如何將 VR 控制器與 WebVR 應用程式結合使用的基礎知識。
WebVR 介面
VRDisplay-
表示此 API 支援的任何 VR 裝置。它包括通用資訊,例如裝置 ID 和描述,以及用於開始呈現 VR 場景、檢索眼睛引數和顯示功能以及其他重要功能的方法。
VRDisplayCapabilities-
描述
VRDisplay的功能——其功能可用於執行 VR 裝置功能測試,例如它是否可以返回位置資訊。 VRDisplayEvent-
表示 WebVR 相關事件的事件物件(參見下面列出的視窗事件)。
VRFrameData-
表示渲染 VR 場景單幀所需的所有資訊;由
VRDisplay.getFrameData()構建。 VRPose-
表示給定時間戳下的位置狀態(包括方向、位置、速度和加速度)。
VREyeParameters-
提供對為每隻眼睛正確渲染場景所需的所有資訊的訪問,包括視野資訊。
VRFieldOfView-
表示由描述從中心點觀看的 4 個不同度數值定義的視野。
VRLayerInit-
表示要顯示在
VRDisplay中的圖層。 VRStageParameters-
表示描述支援房間規模體驗裝置的舞臺區域的值。
其他介面的擴充套件
WebVR API 擴充套件了以下 API,添加了列出的功能。
Gamepad
Gamepad.displayId只讀-
返回關聯
VRDisplay的VRDisplay.displayId——即遊戲手柄正在控制其顯示場景的VRDisplay。
Navigator
-
返回一個數組,其中包含當前正在呈現的每個
VRDisplay物件(VRDisplay.isPresenting為true)。 -
返回一個 Promise,該 Promise 解析為
VRDisplay物件陣列,表示連線到計算機的任何可用 VR 顯示器。
視窗事件
vrdisplaypresentchange-
當 VR 顯示器的呈現狀態改變時觸發——即從呈現到不呈現或反之。
vrdisplayconnect-
當相容的 VR 顯示器連線到計算機時觸發。
vrdisplaydisconnect-
當相容的 VR 顯示器從計算機斷開連線時觸發。
vrdisplayactivate-
當顯示器可以呈現時觸發。
vrdisplaydeactivate-
當顯示器不再能夠呈現時觸發。
示例
您可以在以下位置找到許多示例:
- webvr-tests — 非常簡單的示例,與 MDN WebVR 文件配套。
- Carmel 入門套件 — 簡單、註釋良好的示例,與 Facebook 的 WebVR 瀏覽器 Carmel 配套。
- WebVR.info 示例 — 稍微更深入的示例和原始碼
- A-Frame 主頁 — 顯示 A-Frame 用法的示例
規範
此 API 在舊的 WebVR API 中指定,該 API 已被 WebXR Device API 取代。它不再有望成為標準。
在所有瀏覽器都實現新的 WebXR API 之前,建議依靠 A-Frame、Babylon.js 或 Three.js 等框架,或 polyfill 來開發可在所有瀏覽器上執行的 WebXR 應用程式。有關更多資訊,請閱讀 Meta 的從 WebVR 移植到 WebXR 指南。
瀏覽器相容性
載入中…
另見
- A-Frame — 用於構建 VR 體驗的開源 Web 框架。
- webvr.info — 關於 WebVR、瀏覽器設定和社群的最新資訊。
- threejs-vr-boilerplate — 一個有用的啟動模板,用於編寫 WebVR 應用程式。
- Web VR polyfill — WebVR 的 JavaScript 實現。
- WebVR Directory — 高質量 WebVR 網站列表。