XRWebGLBinding: getSubImage() 方法

可用性有限

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

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

XRWebGLBinding 介面的 getSubImage() 方法返回一個 XRWebGLSubImage 物件,該物件表示要渲染的 WebGL 紋理。

語法

js
getSubImage(layer, frame)
getSubImage(layer, frame, eye)

引數

layer

用於渲染的 XRCompositionLayer(可以是除 XRProjectionLayer 之外的所有型別的 XRCompositionLayer 物件,有關渲染投影層的請參閱 XRWebGLBinding.getViewSubImage())。

frame

用於渲染的 XRFrame 幀。

eye 可選

一個可選的 XRView.eye,指示要用於渲染的檢視的哪隻眼睛。可能的值

left

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

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

none

該檢視描述了單眼檢視,或者該檢視不代表特定眼睛的視角。預設為 none

返回值

一個 XRWebGLSubImage 物件。

異常

如果滿足以下任一條件,則會丟擲 TypeError

示例

渲染 XRQuadLayer

以下示例渲染了一個 XRQuadLayer

js
const xrGlBinding = new XRWebGLBinding(xrSession, gl);
const quadLayer = xrGlBinding.createQuadLayer({
  space: xrReferenceSpace,
  viewPixelWidth: 512,
  viewPixelHeight: 512,
});

// Position 2 meters away from the origin with a width and height of 1.5 meters
quadLayer.transform = new XRRigidTransform({ z: -2 });
quadLayer.width = 1.5;
quadLayer.height = 1.5;

const framebuffer = gl.createFramebuffer();
xrSession.updateRenderState({ layers: [quadLayer] });
xrSession.requestAnimationFrame(onXRFrame);

function onXRFrame(time, xrFrame) {
  xrSession.requestAnimationFrame(onXRFrame);

  gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
  let subImage = xrGlBinding.getSubImage(quadLayer, xrFrame);
  gl.framebufferTexture2D(
    gl.FRAMEBUFFER,
    gl.COLOR_ATTACHMENT0,
    subImage.colorTexture,
    0,
  );
  let viewport = subImage.viewport;
  gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);

  // Render content for the quad layer
}

規範

規範
WebXR Layers API Level 1
# dom-xrwebglbinding-getsubimage

瀏覽器相容性

另見