XRViewerPose
WebXR 设备 API 接口XRViewerPose
表示场景中查看者视角的姿势(位置和方向)。每个XRViewerPose
可以有多个视图来表示,例如,左右眼之间的微小间距。
此视图可以表示从用户 XR 头显的视角到玩家使用鼠标和键盘移动头像在屏幕上呈现的视角,再到虚拟摄像机捕获场景以供观众观看的视角。
实例属性
使用说明
XRViewerPose
对象用于描述 WebXR 场景查看者的状态,该状态由用户的 XR 硬件跟踪。查看者可能是用户的虚拟表示,也可能是充当场景视图位置和方向来源的其他设备或接口的表示。例如,MMORPG 中的每个玩家都可能有一个XRViewerPose
实例,以提供一种方法来计算他们能看到什么;如果游戏提供了一种机制来告知玩家另一个玩家是否看到了他们,或者他们是否看到了另一个玩家,那么这些信息就变得至关重要。
XRViewerPose
始终相对于现有的XRReferenceSpace
获取和引用。这可确保使用预期的相对坐标系报告位置和方向。
要使用表示用户头部的XRViewerPose
渲染场景,需要遍历视图
数组中的视图,逐个渲染它们。通过在 WebGL 上下文中调用视口()
,并将XRView
作为输入,您可以获取渲染时要使用的视口,以便将该眼睛的帧绘制到绘制表面的正确部分。
此外,在为观众或多人游戏中其他玩家渲染场景时,XRViewerPose
的变换
可用于确定游戏中其他玩家的放置和朝向方向,以便将它们绘制在正确的位置,并以正确的朝向进行绘制。
可以通过调用帧的getViewerPose()
方法,并指定应计算原点位置的参考空间,来获取由XRFrame
表示的动画帧的查看者姿势。返回的XRViewerPose
会告诉您帧发生时查看者的位置和朝向。
示例
在此示例(渲染XRFrame
的代码的一部分)中,调用getViewerPose()
以使用与代码作为其基本参考空间使用的相同参考空间获取XRViewerPose
。如果返回了有效的姿势,则通过清除后缓冲区并渲染姿势中的每个视图来渲染帧;这些最可能是左右眼的视图。
const pose = frame.getViewerPose(xrReferenceSpace);
if (pose) {
const glLayer = xrSession.renderState.baseLayer;
gl.bindFrameBuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
gl.clearColor(0, 0, 0, 1);
gl.clearDepth(1);
gl.clear(gl.COLOR_BUFFER_BIT, gl.DEPTH_BUFFER_BIT);
for (const view of pose.views) {
const viewport = glLayer.getViewport(view);
gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);
/* render the scene for the eye view.eye */
}
}
将每个视图
传递给getViewport()
会返回要应用的 WebGL 视口,以使渲染的输出在帧缓冲区中正确定位,以便渲染到输出设备上的相应眼睛。
此代码源自我们“运动和运动”WebXR 示例中的绘制帧。您可以在该页面上看到更多上下文和更多内容。
规范
规范 |
---|
WebXR 设备 API # xrviewerpose-interface |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。