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.RGB
-
gl.RGBA
此外,对于启用了EXT_sRGB
扩展的上下文 ext.SRGB_EXT
-
ext.SRGB_ALPHA_EXT
此外,对于WebGL2RenderingContext
上下文 gl.RGBA8
gl.RGB8
gl.SRGB8
-
gl.RGB8_ALPHA8
此外,对于启用了WEBGL_compressed_texture_etc
扩展的上下文 ext.COMPRESSED_RGB8_ETC2
ext.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
ext.COMPRESSED_RGBA8_ETC2_EAC
ext.COMPRESSED_SRGB8_ETC2
ext.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
-
ext.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
此外,对于启用了WEBGL_compressed_texture_astc
扩展的上下文 -
扩展支持的
所有
格式。默认值为gl.RGBA
。
depthFormat
可选-
一个
GLenum
,定义深度纹理数据的类型,或0
,表示图层不应该提供深度纹理(在这种情况下,XRProjectionLayer.ignoreDepthValues
将为true
)。在启用了WEBGL_depth_texture
扩展的WebGLRenderingContext
上下文,或在WebGL2RenderingContext
上下文(不需要扩展)中,可能的取值gl.DEPTH_COMPONENT
-
gl.DEPTH_STENCIL
此外,对于WebGL2RenderingContext
上下文 gl.DEPTH_COMPONENT24
-
gl.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 级别 1 # dom-xrwebglbinding-createcylinderlayer |
浏览器兼容性
BCD 表格仅在浏览器中加载