PositionSensorVRDevice - 代表 VR 硬件的位置传感器

已过时
此功能已过时。虽然它可能仍在某些浏览器中工作,但是不鼓励使用,因为它可能随时被删除。尽量避免使用它。

这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。

PositionSensorVRDeviceWebVR API 的接口,代表 VR 硬件的位置传感器。您可以通过 PositionSensorVRDevice.getState() 方法访问相关信息,例如传感器相对于头戴式显示器的当前位置和方向。

方法

PositionSensorVRDevice.getState()

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

PositionSensorVRDevice.getImmediateState()

返回当前瞬时位置传感器状态。该方法仅打算在某些特殊用途中很少使用,或者至少将来会使用,例如采样的即时位置的手定位传感器。

PositionSensorVRDevice.resetSensor()

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

属性

该接口自身没有定义任何属性,但继承了其父接口 VRDevice} 的属性。

VRDevice.hardwareUnitId 只读

返回此 VRDevice 所属的整体硬件单元的唯一硬件 ID。属于同一物理硬件的所有设备都将具有相同的 hardwareUnitId

VRDevice.deviceId 只读

返回此特定 VRDevice 的 ID。该 ID 不应在浏览器重新启动时更改,而是允许基于该 ID 保存配置数据。

VRDevice.deviceName 只读

易于识别的名称,用于标识 VRDevice

实例

以下实例来自我们的 positionsensorvrdevice 演示,该演示使用 WebVR API 更新 requestAnimationFrame 循环的每一帧上的简单 2D 画布场景的视图。

function setView() {
  var posState = gPositionSensor.getState();
  if(posState.hasPosition) {
    posPara.textContent = '位置: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;
    if(-posState.position.z > 0.01) {
      zPos = -posState.position.z;
    } else {
      zPos = 0.01;
    }
  }

  if(posState.hasOrientation) {
    orientPara.textContent = '方向: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() 获取一个 VRPositionState 对象,并将其存储在 posState 中。然后,我们使用 VRPositionState.hasPositionVRPositionState.hasOrientation 检查并确保当前帧中存在位置和方向信息(例如,如果头戴式显示器关闭或未指向位置传感器,则返回 null,这将导致错误。)

然后我们输出 x,y 和 z 的位置和方向值,以供参考,并使用这些值来更新 xPosyPoszPos, xOrientyOrientzOrient 变量,用于更新每帧的场景渲染。

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持 支持1 不支持392 不支持 不支持 不支持
getImmediateState 支持1 不支持392 不支持 不支持 不支持
getState 支持1 不支持392 不支持 不支持 不支持
resetSensor 支持1 不支持392 不支持 不支持 不支持

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持 不支持 不支持 未知

393

444

未知 不支持 不支持
getImmediateState 不支持 不支持 未知

393

444

未知 不支持 不支持
getState 不支持 不支持 未知

393

444

未知 不支持 不支持
resetSensor 不支持 不支持 未知

393

444

未知 不支持 不支持

1. Chrome 中的支持目前处于试验阶段。要查找有关 Chrome 的 WebVR 实施状态(包括支持的版本)的信息,请查看 Brandon Jones 的 将 VR 引入 Chrome

2. Firefox 当前默认情况下禁用此功能。要在 Firefox Nightly / Developer Edition 中启用 WebVR 支持,您可以转到 about:config 并启用 dom.vr* 首选项。但是,更好的选择是安装 WebVR Enabler 加载项,它会为您完成此操作并设置环境的其他必要部分。

3. Firefox 当前默认情况下禁用此功能。要在 Firefox Nightly / Developer Edition 中启用 WebVR 支持,您可以转到 about:config 并启用 dom.vr* 首选项。但是,更好的选择是安装 WebVR Enabler 加载项,它会为您完成此操作并设置环境的其他必要部分。

4. 在 Nightly / Aurora 版本中,默认情况下已启用 dom.vr* 首选项。

相关链接