XRViewerPose

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

WebXR 裝置 API 介面 XRViewerPose 表示檢視器在場景中的視點(位置和方向)。每個 XRViewerPose 可以有多個檢視,例如,用於表示左右眼之間的輕微分離。

此檢視可以表示從使用者的 XR 頭戴式顯示器的視點,到在螢幕上呈現的、使用滑鼠和鍵盤代表的玩家頭像移動的視點,再到一個捕捉場景供旁觀者觀看的虛擬攝像機。

XRPose XRViewerPose

例項屬性

除了繼承自 XRPose 的屬性外,XRViewerPose 還包含以下內容:

views 只讀

一個 XRView 物件陣列,每個物件代表一個視點,用於向用戶呈現場景。一個典型的頭戴式顯示器會提供一個檢視器姿勢,其中包含兩個檢視,它們的 eye 屬性為 leftright,表示該檢視代表的是哪隻眼睛。合在一起,這些檢視可以在 XR 裝置上顯示時重現 3D 效果。

用法說明

XRViewerPose 物件用於描述 WebXR 場景中檢視器的狀態,該狀態由使用者的 XR 硬體跟蹤。檢視器可以是使用者在虛擬世界中的表示,也可以代表另一個裝置或介面,該裝置或介面可以作為構成場景檢視的位置和方向的來源。例如,MMORPG 中的每個玩家可能都有一個 XRViewerPose 例項,用於計算他們可以看到的內容;如果遊戲提供了一種機制來告知玩家另一個玩家是否看到他們,或者他們是否看到另一個玩家,則此資訊變得至關重要。

XRViewerPose 始終是相對於現有的 XRReferenceSpace 獲取和引用的。這確保了位置和方向會使用預期的相對座標系統進行報告。

要使用代表使用者頭部姿勢的 XRViewerPose 來渲染場景,可以遍歷 views 陣列中的檢視,依次進行渲染。透過在 WebGL 上下文上呼叫 viewport(),並將 XRView 作為輸入,您可以獲取用於渲染的視口,以便將該眼睛的幀繪製到繪圖表面的正確部分。

此外,在為旁觀者或多人遊戲中的其他玩家渲染場景時,XRViewerPosetransform 可用於確定其他玩家在遊戲中的位置和朝向,以便他們可以以正確的姿勢正確地繪製出來。

可以透過呼叫幀的 getViewerPose() 方法來獲取由 XRFrame 表示的動畫幀的檢視器姿勢,並指定原點位置應在哪種參考空間中計算。返回的 XRViewerPose 會告知您在幀發生時檢視器的位置以及他們的朝向。

示例

在此示例中——這是渲染 XRFrame 的部分程式碼,呼叫了 getViewerPose() 以使用程式碼作為其基礎參考空間的相同參考空間獲取 XRViewerPose。如果返回了有效的姿勢,則透過清除後緩衝區並渲染姿勢中的每個檢視來渲染幀;這些很可能是左右眼檢視。

js
const pose = frame.getViewerPose(xrReferenceSpace);

if (pose) {
  const glLayer = xrSession.renderState.baseLayer;

  gl.bindFrameBuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
  gl.clearColor(0, 0, 0, 1);
  gl.clearDepth(1);
  gl.clear(gl.COLOR_BUFFER_BIT, gl.DEPTH_BUFFER_BIT);

  for (const view of pose.views) {
    const viewport = glLayer.getViewport(view);
    gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);

    /* render the scene for the eye view.eye */
  }
}

將每個 view 傳遞給 getViewport() 會返回 WebGL 視口,透過應用該視口可以使渲染的輸出在幀緩衝區中正確放置,以便在輸出裝置上為相應的眼睛進行渲染。

此程式碼源自我們 WebXR 示例“運動與動作”中的繪製幀。您可以在該頁面上看到更多上下文和更多內容。

規範

規範
WebXR Device API
# xrviewerpose-interface

瀏覽器相容性

另見