PositionSensorVRDevice

已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。

非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。

PositionSensorVRDevice 接口是 WebVR API 的一部分,它代表 VR 硬件的位置传感器。你可以通过 PositionSensorVRDevice.getState() 方法来获取关于传感器相对于头戴式显示器的当前位置和方向等信息。

实例方法

PositionSensorVRDevice.getState() 已弃用 非标准

返回当前帧(例如,在当前的 window.requestAnimationFrame 回调中)或上一帧的位置传感器的当前状态,包含在一个 VRPose 对象中。与 getImmediateState() 相比,这通常是你想要使用的方法。

PositionSensorVRDevice.getImmediateState() 已弃用 非标准

返回当前即时的位置传感器状态。这仅用于极少数特殊用途,例如采样手部方向传感器的即时位置——或者将来会如此。

PositionSensorVRDevice.resetSensor() 已弃用 非标准

如果需要,可用于重置传感器,将位置和方向值返回为零。

实例属性

此接口本身不定义任何属性,但它继承了其父接口 VRDisplay 的属性。

VRDisplay.displayId 只读

返回此特定 VRDevice 的 ID。此 ID 在浏览器重启后不应改变,允许基于它保存配置数据。

VRDisplay.displayName 只读

用于标识 VRDevice 的人类可读名称。

示例

以下示例使用 WebVR API 在 requestAnimationFrame 循环的每一帧更新一个简单的 2D canvas 场景的视图。

js
function setView() {
  const posState = gPositionSensor.getState();
  if (posState.hasPosition) {
    posPara.textContent = `Position: x${roundToTwo(
      posState.position.x,
    )} y${roundToTwo(posState.position.y)} z${roundToTwo(posState.position.z)}`;
    xPos = -posState.position.x * WIDTH * 2;
    yPos = posState.position.y * HEIGHT * 2;
    zPos = -posState.position.z > 0.01 ? -posState.position.z : 0.01;
  }

  if (posState.hasOrientation) {
    orientPara.textContent = `Orientation: x${roundToTwo(
      posState.orientation.x,
    )} y${roundToTwo(posState.orientation.y)} z${roundToTwo(
      posState.orientation.z,
    )}`;
    xOrient = posState.orientation.x * WIDTH;
    yOrient = -posState.orientation.y * HEIGHT * 2;
    zOrient = posState.orientation.z * 180;
  }
}

在这里,我们使用 PositionSensorVRDevice.getState() 获取一个 VRPose 对象,并将其存储在 posState 中。然后,我们使用 VRPose.positionVRPose.orientation 检查当前帧中是否存在位置和方向信息(如果头戴式显示器关闭或未指向位置传感器,它们会返回 null,这会导致错误)。

然后,我们输出 x、y 和 z 的位置和方向值以供信息参考,并使用这些值更新 xPosyPoszPosxOrientyOrientzOrient 变量,这些变量用于在每一帧中更新场景渲染。

浏览器兼容性

另见