VRPose - 表示给定时间戳下 VR 传感器的状态
这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
VRPose 是 WebVR API 的接口,表示给定时间戳下 VR 传感器的状态(包括方向,位置,速度和 加速信息。)
可通过 VRDisplay.getPose() 和 VRDisplay.getFrameData() 方法访问此接口。VRDisplay.getPose() 方法已弃用。
属性
VRPose.position 只读
返回 VRDisplay 在当前 VRPose.timestamp 时的位置,以 3D 向量的形式表示。
VRPose.linearVelocity 只读
返回 VRDisplay 在当前 VRPose.timestamp 时的线速度,以米 / 秒为单位。
VRPose.linearAcceleration 只读
返回 VRDisplay 在当前 VRPose.timestamp 时的线性加速度,以米 / 秒为单位。
VRPose.orientation 只读
返回传感器在当前 VRPose.timestamp 的方向,以四分之一度值表示。
VRPose.angularVelocity 只读
返回 VRDisplay 在当前 VRPose.timestamp 时角速度,以弧度每秒为单位表示。
VRPose.angularAcceleration 只读
返回 VRDisplay 在当前 VRPose.timestamp 的角加速度,以每秒米 / 秒为单位。
过时的属性
VRPose.timeStamp 只读
返回系统的当前时间戳 - 一个单调递增的值,用于确定位置数据是否已更新以及发生了什么顺序更新。此版本的时间戳已从规格中删除 - 现在改为在调用 VRDisplay.getFrameData() 中返回时间戳 - 请参见 VRFrameData.timestamp。
实例
var frameData = new VRFrameData();
var vrDisplay;
navigator.getVRDisplays().then(function(displays) {
vrDisplay = displays[0];
console.log('发现显示器');
// 单击该按钮时开始展示:只能响应用户手势来调用它
btn.addEventListener('click', function() {
vrDisplay.requestPresent([{ source: canvas }]).then(function() {
drawVRScene();
});
});
});
// WebVR:绘制 WebVR 显示场景。
function drawVRScene() {
// WebVR:请求动画的下一帧
vrSceneFrame = vrDisplay.requestAnimationFrame(drawVRScene);
// 用要显示的下一帧数据填充 frameData
vrDisplay.getFrameData(frameData);
// 您可以从当前帧的姿势获取显示的位置,方向等
// curFramePose 是一个 VRPose 对象
var curFramePose = frameData.pose;
var curPos = curFramePose.position;
var curOrient = curFramePose.orientation;
// 在开始在其上绘制之前,清除画布。
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// WebVR:创建所需的投影并查看传递到下面的 uniformMatrix4fv 方法所需的矩阵位置
var projectionMatrixLocation = gl.getUniformLocation(shaderProgram, "projMatrix");
var viewMatrixLocation = gl.getUniformLocation(shaderProgram, "viewMatrix");
// WebVR:将左眼的视图渲染到画布的左半部分
gl.viewport(0, 0, canvas.width * 0.5, canvas.height);
gl.uniformMatrix4fv(projectionMatrixLocation, false, frameData.leftProjectionMatrix);
gl.uniformMatrix4fv(viewMatrixLocation, false, frameData.leftViewMatrix);
drawGeometry();
// WebVR:将右眼的视图渲染到画布的右半部分
gl.viewport(canvas.width * 0.5, 0, canvas.width * 0.5, canvas.height);
gl.uniformMatrix4fv(projectionMatrixLocation, false, frameData.rightProjectionMatrix);
gl.uniformMatrix4fv(viewMatrixLocation, false, frameData.rightViewMatrix);
drawGeometry();
function drawGeometry() {
// 绘制每只眼睛的视图
}
// ...
// WebVR:表示我们已准备好将呈现的帧呈现给VR显示器
vrDisplay.submitFrame();
}
注意:您可以在 raw-webgl-example 上看到完整的代码。
规范
| 规范 | 状态 | 备注 |
|---|---|---|
| WebVR 1.1 VRPose 的定义 |
草稿 | 初始定义 |
桌面浏览器兼容性
| 特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
| 基础支持 | 不支持 | ≤18 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
angularAcceleration | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
angularVelocity | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
hasOrientation | 不支持 | 不支持 | 不支持 | 不支持 | 未知 | 不支持 |
hasPosition | 不支持 | 不支持 | 不支持 | 不支持 | 未知 | 不支持 |
linearAcceleration | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
linearVelocity | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
orientation | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
position | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
timestamp | 不支持 | 15 — 79 | 不支持 | 不支持 | 未知 | 不支持 |
移动浏览器兼容性
| 特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
|---|---|---|---|---|---|---|---|
| 基础支持 | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
angularAcceleration | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
angularVelocity | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
hasOrientation | 不支持 | 不支持 | 未知 | 未知 | 未知 | 未知 | 未知 |
hasPosition | 不支持 | 不支持 | 未知 | 未知 | 未知 | 未知 | 未知 |
linearAcceleration | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
linearVelocity | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
orientation | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
position | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
timestamp | 不支持 | 不支持 | 未知 | 未知 | 未知 | 未知 | 未知 |
1. 只能在 Chrome 的实验版本中使用。(其他构建在调用 Navigator.getVRDisplays() 时不会返回任何设备。)
2. Chrome 56 支持 Daydream View。
3. Chrome 57 支持 Google Cardboard。
4. 在 Firefox 55 中启用了 Windows 支持。
5. 在 Firefox 64 中启用了 macOS 支持。
6. Samsung Internet 7.0 支持 Google Cardboard。
相关链接
- MozVr.com — Mozilla VR 团队提供的演示,下载和其他资源。