PositionSensorVRDevice - 代表 VR 硬件的位置传感器
此功能已过时。虽然它可能仍在某些浏览器中工作,但是不鼓励使用,因为它可能随时被删除。尽量避免使用它。
这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
PositionSensorVRDevice
是 WebVR 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.hasPosition
和 VRPositionState.hasOrientation
检查并确保当前帧中存在位置和方向信息(例如,如果头戴式显示器关闭或未指向位置传感器,则返回 null
,这将导致错误。)
然后我们输出 x,y 和 z 的位置和方向值,以供参考,并使用这些值来更新 xPos
,yPos
,zPos,
xOrient
,yOrient
和 zOrient
变量,用于更新每帧的场景渲染。
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 支持1 | 不支持 | 392 | 不支持 | 不支持 | 不支持 |
getImmediateState | 支持1 | 不支持 | 392 | 不支持 | 不支持 | 不支持 |
getState | 支持1 | 不支持 | 392 | 不支持 | 不支持 | 不支持 |
resetSensor | 支持1 | 不支持 | 392 | 不支持 | 不支持 | 不支持 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS 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*
首选项。
相关链接
- WebVR API 主页.
- MozVr.com — Mozilla VR 团队提供的演示,下载和其他资源。