XRViewerPose

安全上下文:此功能仅在安全上下文(HTTPS)中,在一些或所有支持的浏览器中可用。

WebXR 设备 API 接口XRViewerPose表示场景中查看者视角的姿势(位置和方向)。每个XRViewerPose可以有多个视图来表示,例如,左右眼之间的微小间距。

此视图可以表示从用户 XR 头显的视角到玩家使用鼠标和键盘移动头像在屏幕上呈现的视角,再到虚拟摄像机捕获场景以供观众观看的视角。

XRPose XRViewerPose

实例属性

除了从XRPose继承的属性之外,XRViewerPose还包括以下内容

视图 只读

一个XRView对象数组,每个对象代表场景中需要向用户呈现的一个视角。典型的头显提供了一个具有两个视图的查看者姿势,其属性为,表示该视图代表哪个眼睛。综合来看,这些视图可以在 XR 设备上显示时重现 3D 效果。

使用说明

XRViewerPose对象用于描述 WebXR 场景查看者的状态,该状态由用户的 XR 硬件跟踪。查看者可能是用户的虚拟表示,也可能是充当场景视图位置和方向来源的其他设备或接口的表示。例如,MMORPG 中的每个玩家都可能有一个XRViewerPose实例,以提供一种方法来计算他们能看到什么;如果游戏提供了一种机制来告知玩家另一个玩家是否看到了他们,或者他们是否看到了另一个玩家,那么这些信息就变得至关重要。

XRViewerPose始终相对于现有的XRReferenceSpace获取和引用。这可确保使用预期的相对坐标系报告位置和方向。

要使用表示用户头部的XRViewerPose渲染场景,需要遍历视图数组中的视图,逐个渲染它们。通过在 WebGL 上下文中调用视口(),并将XRView作为输入,您可以获取渲染时要使用的视口,以便将该眼睛的帧绘制到绘制表面的正确部分。

此外,在为观众或多人游戏中其他玩家渲染场景时,XRViewerPose变换可用于确定游戏中其他玩家的放置和朝向方向,以便将它们绘制在正确的位置,并以正确的朝向进行绘制。

可以通过调用帧的getViewerPose()方法,并指定应计算原点位置的参考空间,来获取由XRFrame表示的动画帧的查看者姿势。返回的XRViewerPose会告诉您帧发生时查看者的位置和朝向。

示例

在此示例(渲染XRFrame的代码的一部分)中,调用getViewerPose()以使用与代码作为其基本参考空间使用的相同参考空间获取XRViewerPose。如果返回了有效的姿势,则通过清除后缓冲区并渲染姿势中的每个视图来渲染帧;这些最可能是左右眼的视图。

js
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 的浏览器中加载。

另请参阅