XRWebGLBinding: getSubImage() 方法

实验性: 这是一个 实验性技术
在生产环境中使用此方法之前,请仔细查看 浏览器兼容性表

getSubImage() 方法是 XRWebGLBinding 接口的一部分,它返回一个 XRWebGLSubImage 对象,该对象表示要渲染的 WebGL 纹理。

语法

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

参数

layer

用于渲染的 XRCompositionLayer(可以是所有类型的 XRCompositionLayer 对象,除了 XRProjectionLayer,有关渲染投影层的说明,请参见 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 层 API 级别 1
# dom-xrwebglbinding-getsubimage

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅