XRView:eye 屬性

可用性有限

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

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

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

XRView 介面的只讀 **eye** 屬性是一個字串,用於指示 XRView 代表哪隻眼睛的視點:left(左眼)或 right(右眼)。對於不代表任何一隻眼睛的檢視,例如單眼檢視,此屬性的值為 none

一個可以為以下值之一的字串

left

XRView 代表檢視者的左眼視點。

該檢視代表檢視者的右眼。

none

XRView 描述的是一個單眼檢視,或者該檢視不代表任何一隻眼睛的視點。

用法說明

此屬性的主要目的是允許將任何預渲染立體內容(stereo content)的正確區域呈現給正確的眼睛。對於動態渲染的 3D 內容,您通常可以忽略此屬性,並依次渲染檢視者的每個檢視。

示例

此程式碼來自檢視器姿勢 (viewer pose) 的渲染器,它會遍歷姿勢的檢視並進行渲染。但是,我們有一些標誌,如果為 true,則表示在遊戲中某隻眼睛受傷了。渲染該眼睛時,如果標誌為 true,則跳過該檢視而不進行渲染。

js
glLayer = xrSession.renderState.baseLayer;
gl.bindFramebuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
gl.clearColor(0, 0, 0, 1.0);
gl.clearDepth(1.0);
gl.clear(gl.COLOR_BUFFER_BIT, gl.DEPTH_BUFFER_BIT);

for (const view of xrPose.views) {
  let skipView = false;

  if (view.eye === "left" && body.leftEye.injured) {
    skipView = updateInjury(body.leftEye);
  } else if (view.eye === "right" && body.rightEye.injured) {
    skipView = updateInjury(body.rightEye);
  }

  if (!skipView) {
    let viewport = glLayer.getViewport(view);
    gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);
    renderScene(gl, view);
  }
}

對於每個檢視,都會檢查 eye 的值,如果它為 leftright,我們就會檢查 body.leftEye.injuredbody.rightEye.injured 屬性是否為 true;如果是,我們就會在該眼睛上呼叫 updateInjury() 函式,以根據遊戲需求執行諸如允許少量治癒、追蹤中毒效果的進度等操作。

updateInjury() 返回 true 表示眼睛仍然受傷,或者返回 false 表示眼睛已透過該函式恢復健康。如果結果為 false(表示眼睛現在健康),我們則為該眼睛渲染場景。否則,不渲染。

規範

規範
WebXR Device API
# dom-xrview-eye

瀏覽器相容性