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
,用于指示要使用哪个视图的眼睛进行渲染。可能的值
返回值
一个 XRWebGLSubImage
对象。
异常
将抛出 TypeError
,
- 如果
layer
不在 会话的layer
数组中。 - 如果
layer
是XRProjectionLayer
。 - 如果该层的
layout
属性为default
。 - 如果该层的
layout
属性为stereo
且eye
为none
。
示例
渲染 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 的浏览器中加载。