WebVR API

已棄用:此特性不再推薦。雖然某些瀏覽器可能仍然支援它,但它可能已經從相關的網路標準中刪除,可能正在刪除過程中,或者可能僅為相容性目的而保留。請避免使用它,如果可能,請更新現有程式碼;請參閱本頁底部的相容性表格以指導您的決策。請注意,此特性可能隨時停止工作。

非標準:此特性未標準化。我們不建議在生產環境中使用非標準特性,因為它們瀏覽器支援有限,並且可能會更改或被移除。但是,在沒有標準選項的特定情況下,它們可以是合適的替代方案。

注意: WebVR API 已被 WebXR API 取代。WebVR 從未被批准為標準,在少數瀏覽器中預設實現和啟用,並支援少量裝置。

WebVR 為將虛擬現實裝置(例如,Oculus Rift 或 HTC Vive 等頭戴式顯示器)暴露給 Web 應用程式提供了支援,使開發人員能夠將顯示器的位置和運動資訊轉換為 3D 場景中的運動。這有許多有趣的應用程式,從虛擬產品參觀和互動培訓應用程式到沉浸式第一人稱遊戲。

概念與用法

連線到您計算機的任何 VR 裝置都將透過 Navigator.getVRDisplays() 方法返回;每個裝置都將由一個 VRDisplay 物件表示。

Sketch of a person in a chair with wearing goggles labelled "Head mounted display (HMD)" facing a monitor with a webcam labelled "Position sensor"

VRDisplay 是 WebVR API 中的核心介面——透過其屬性和方法,您可以訪問以下功能:

  • 檢索有用的資訊,以幫助我們識別顯示器、其功能、與之關聯的控制器等。
  • 為要顯示在顯示器中的每一幀內容檢索幀資料,並以一致的速率提交這些幀進行顯示。
  • 開始和停止向顯示器呈現內容。

一個典型的(簡單)WebVR 應用程式將像這樣工作:

  1. Navigator.getVRDisplays() 用於獲取 VR 顯示器的引用。
  2. VRDisplay.requestPresent() 用於開始向 VR 顯示器呈現內容。
  3. WebVR 專用的 VRDisplay.requestAnimationFrame() 方法用於以顯示器正確的重新整理率執行應用程式的渲染迴圈。
  4. 在渲染迴圈中,您獲取顯示當前幀所需的資料 (VRDisplay.getFrameData()),將顯示的場景繪製兩次——一次用於每隻眼睛的檢視,然後將渲染的檢視提交給顯示器以顯示給使用者 (VRDisplay.submitFrame())。

此外,WebVR 1.1 在 Window 物件上添加了許多事件,允許 JavaScript 響應顯示器狀態的變化。

注意:您可以在我們的 使用 WebVR APIWebVR 概念文章中找到更多關於 API 工作原理的資訊。

API 可用性

WebVR API 從未被批准為網路標準,已被棄用,取而代之的是 WebXR API,後者正在順利完成標準化過程。因此,您應該嘗試更新現有程式碼以使用新的 API。通常,轉換應該相當順利。

此外,在某些裝置和/或瀏覽器上,WebVR 要求頁面透過 HTTPS 連線在安全上下文中載入。如果頁面不完全安全,WebVR 方法和函式將不可用。您可以透過檢查 Navigator 方法 getVRDisplays() 是否為 NULL 來輕鬆測試這一點。

js
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 只讀

返回關聯 VRDisplayVRDisplay.displayId ——即遊戲手柄正在控制其顯示場景的 VRDisplay

返回一個數組,其中包含當前正在呈現的每個 VRDisplay 物件(VRDisplay.isPresentingtrue)。

返回一個 Promise,該 Promise 解析為 VRDisplay 物件陣列,表示連線到計算機的任何可用 VR 顯示器。

視窗事件

vrdisplaypresentchange

當 VR 顯示器的呈現狀態改變時觸發——即從呈現到不呈現或反之。

vrdisplayconnect

當相容的 VR 顯示器連線到計算機時觸發。

vrdisplaydisconnect

當相容的 VR 顯示器從計算機斷開連線時觸發。

vrdisplayactivate

當顯示器可以呈現時觸發。

vrdisplaydeactivate

當顯示器不再能夠呈現時觸發。

示例

您可以在以下位置找到許多示例:

規範

此 API 在舊的 WebVR API 中指定,該 API 已被 WebXR Device API 取代。它不再有望成為標準。

在所有瀏覽器都實現新的 WebXR API 之前,建議依靠 A-FrameBabylon.jsThree.js 等框架,或 polyfill 來開發可在所有瀏覽器上執行的 WebXR 應用程式。有關更多資訊,請閱讀 Meta 的從 WebVR 移植到 WebXR 指南。

瀏覽器相容性

另見