XRWebGLBinding: createCylinderLayer() 方法
createCylinderLayer() 方法是 XRWebGLBinding 接口的一个方法,它返回一个 XRCylinderLayer 对象。这个对象代表虚拟环境中一个弯曲的矩形空间图层。
语法
createCylinderLayer(init)
参数
init-
用于配置
XRCylinderLayer的一个对象。它必须包含space、viewPixelHeight和viewPixelWidth属性。init包含以下属性:aspectRatio可选-
一个数字,表示可见圆柱体部分的比例。它是可见圆柱体部分宽度除以其高度的比例。宽度通过将
radius乘以centralAngle来计算。默认值为2.0。 centralAngle可选-
一个数字,表示圆柱体可见部分的弧度。默认值:
0.78539(π / 4)。 colorFormat可选-
一个
GLenum,用于定义颜色纹理数据的类型。可能的值:gl.RGBgl.RGBA此外,对于启用了EXT_sRGB扩展的上下文:ext.SRGB_EXText.SRGB_ALPHA_EXT此外,对于WebGL2RenderingContext上下文:gl.RGBA8gl.RGB8gl.SRGB8gl.RGB8_ALPHA8此外,对于启用了WEBGL_compressed_texture_etc扩展的上下文:ext.COMPRESSED_RGB8_ETC2ext.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2ext.COMPRESSED_RGBA8_ETC2_EACext.COMPRESSED_SRGB8_ETC2ext.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2ext.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC此外,对于启用了WEBGL_compressed_texture_astc扩展的上下文:- 扩展支持的所有格式。默认值为
gl.RGBA。
depthFormat可选-
一个
GLenum,定义深度纹理数据的类型,或者0表示图层不应提供深度纹理(在这种情况下,XRProjectionLayer.ignoreDepthValues将为true)。在启用WEBGL_depth_texture扩展的WebGLRenderingContext上下文中,或者在WebGL2RenderingContext上下文中(无需扩展)可能的值。gl.DEPTH_COMPONENTgl.DEPTH_STENCIL此外,对于WebGL2RenderingContext上下文:gl.DEPTH_COMPONENT24gl.DEPTH24_STENCIL24默认值为gl.DEPTH_COMPONENT。
isStatic可选-
一个布尔值,如果为 true,则表示您只能在该图层的
needsRedraw为true时进行绘制。默认值为false。 layout可选-
一个字符串,指示图层的布局。可能的值:
default-
该图层支持会话的所有视图。
mono-
分配一个
XRSubImage对象,并将其呈现给双眼。 stereo-
用户代理决定如何分配
XRSubImage(一个或两个)以及布局(上下或左右)。 stereo-left-right-
分配一个
XRSubImage对象。左眼使用纹理的左侧区域,右眼使用右侧区域。 stereo-top-bottom-
分配一个
XRSubImage对象。左眼使用纹理的上侧区域,右眼使用下侧区域。默认值为mono。
mipLevels可选-
一个数字,指定所需的 mip 级别数量。默认值为
1。 radius可选-
一个数字,表示圆柱体的半径。默认值:
2.0。 space必需-
一个
XRSpace对象,定义了图层与用户物理环境的空间关系。 textureType可选-
一个字符串,定义了图层的纹理类型。可能的值:
texture:XRWebGLSubImage的纹理类型为gl.TEXTURE_2D。texture-array:XRWebGLSubImage的纹理类型为gl.TEXTURE_2D_ARRAY(仅限 WebGL 2 上下文)。默认值为texture。
transform可选-
一个
XRRigidTransform对象,定义了相对于space的偏移和方向。 viewPixelHeight必需-
一个数字,指定图层视图的像素高度。
viewPixelWidth必需-
一个数字,指定图层视图的像素宽度。
返回值
一个 XRCylinderLayer 对象。
示例
创建 XRCylinderLayer
使用上面列出的属性配置圆柱体图层,并在调用 createCylinderLayer() 时传入。要将图层呈现给 XR 设备,请使用 XRSession.updateRenderState() 将它们添加到 layers 渲染状态中。
function onXRSessionStarted(xrSession) {
const glCanvas = document.createElement("canvas");
const gl = glCanvas.getContext("webgl2", { xrCompatible: true });
const xrGlBinding = new XRWebGLBinding(xrSession, gl);
const cylinderLayer = xrGlBinding.createCylinderLayer({
space: xrReferenceSpace,
viewPixelWidth: 1200,
viewPixelHeight: 600,
centralAngle: (60 * Math.PI) / 180,
aspectRatio: 2,
radius: 2,
transform: new XRRigidTransform(/* … */),
});
xrSession.updateRenderState({
layers: [cylinderLayer],
});
}
规范
| 规范 |
|---|
| WebXR Layers API Level 1 # dom-xrwebglbinding-createcylinderlayer |
浏览器兼容性
加载中…