VRDisplay - 表示 WebVR API 支持的任何 VR 设备
这是一个实验中的功能
此功能某些浏览器尚在开发中,请参考浏览器兼容性表格以得到在不同浏览器中适合使用的前缀。由于该功能对应的标准文档可能被重新修订,所以在未来版本的浏览器中该功能的语法和行为可能随之改变。
VRDisplay
是 WebVR API 的接口,表示 WebVR API 支持的任何 VR 设备。它包括通用的信息,例如设备 ID 和说明,以及开始呈现 VR 场景,检索眼睛参数和显示功能以及其他重要功能的方法。
可以通过调用 Navigator.getVRDisplays()
方法来返回所有已连接的 VR 设备的数组。
属性
VRDisplay.capabilities
只读
返回一个 VRDisplayCapabilities
对象,该对象表示 VRDisplay
的各种功能。
VRDisplay.depthFar
获取和设置 z 深度,该深度定义了视锥台的远平面,即场景的最远可见边界。
VRDisplay.depthNear
获取和设置 z 深度,该深度定义了视锥台的近平面,即场景的最近可见边界。
VRDisplay.displayId
只读
返回此特定 VRDisplay
的标识符,该标识符也用作 Gamepad API 中的关联点(请参阅 Gamepad.displayId
)。
VRDisplay.displayName
只读
返回人类可读的名称以标识当前对象。
VRDisplay.isConnected
只读
返回一个 Boolean
,指示是否已将 VRDisplay
连接到计算机。
VRDisplay.isPresenting
只读
返回一个 Boolean
,指示 VRDisplay
当前是否正在通过它显示内容。
VRDisplay.stageParameters
只读
如果 VRDisplay
能够支持房间规模的体验,则返回包含房间规模参数的 VRStageParameters
对象。
方法
VRDisplay.getEyeParameters()
返回包含指定眼睛的眼睛参数的 VREyeParameters
对象。
VRDisplay.getFrameData()
接受一个 VRFrameData
对象,并使用呈现当前帧所需的信息填充它。
VRDisplay.getLayers()
返回当前由VRDisplay
呈现的图层。
VRDisplay.resetPose()
重置此 VRDisplay
的姿势,将其当前的 VRPose.position
和 VRPose.orientation
视为 “起点/零” 值。
VRDisplay.cancelAnimationFrame()
Window.cancelAnimationFrame
的特殊实现,它允许注销通过 VRDisplay.requestAnimationFrame()
注册的回调。
VRDisplay.requestAnimationFrame()
Window.requestAnimationFrame
的特殊实现,包含一个回调函数,该函数将在每次呈现 VRDisplay
的新帧时调用。
VRDisplay.requestPresent()
启动显示场景的 VRDisplay
。
VRDisplay.exitPresent()
停止显示场景的 VRDisplay
。
VRDisplay.submitFrame()
捕获当前显示的 VRLayer
的当前状态,并将其显示在 VRDisplay
上。
废弃的方法
VRDisplay.getPose()
返回一个 VRPose
对象,该对象定义了 VRDisplay
的未来预测姿势,就像当前帧实际显示时那样。不建议使用此方法 - 相反,您应该使用 VRDisplay.getFrameData()
,它也返回了一个 VRPose
对象。
过时的方法
VRDisplay.getImmediatePose()
返回一个 VRPose
对象,该对象定义 VRDisplay
的当前姿势,不应用任何预测。 它已不再需要,并且已从规范中删除。
VRDisplay.hardwareUnitId
返回一个 DOMString
,定义显示的共享 ID ,以及该硬件集合的任何其他设备(例如控制器)。它已不再需要,并且已经从规范中删除。现在显示器将使用 VRDisplay.displayId
,并且相应的控制器现在将和 Gamepad.displayId
返回相同的 ID。
实例
if(navigator.getVRDisplays) {
console.log('WebVR 1.1 supported');
// 然后将显示器连接到计算机
navigator.getVRDisplays().then(function(displays) {
// 如果有显示器,请使用它来呈现场景
if(displays.length > 0) {
vrDisplay = displays[0];
// 现在我们有了 VRDisplay 对象,并可以使用它做我们想做的事情
}
});
}
注意: 您可以在 raw-webgl-example 上看到完整的代码。
规范
规范 | 状态 | 备注 |
---|---|---|
WebVR 1.1 VRDisplay 的定义 |
草稿 | 初始定义 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
基础支持 | 不支持 | ≤18 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
cancelAnimationFrame | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
capabilities | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
depthFar | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
depthNear | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
displayId | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
displayName | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
exitPresent | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
getEyeParameters | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
getFrameData | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
getImmediatePose | 不支持 | 不支持 | 554 645 | 不支持 | 未知 | 不支持 |
getLayers | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
getPose | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
hardwareUnitId | 不支持 | 不支持 | 不支持 | 不支持 | 未知 | 不支持 |
isConnected | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
isPresenting | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
requestAnimationFrame | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
requestPresent | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
resetPose | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
stageParameters | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
submitFrame | 不支持 | 15 — 79 | 554 645 | 不支持 | 未知 | 不支持 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
基础支持 | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
cancelAnimationFrame | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
capabilities | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
depthFar | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
depthNear | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
displayId | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
displayName | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
exitPresent | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
getEyeParameters | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
getFrameData | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
getImmediatePose | 不支持 | 不支持 | 未知 | 55 | 未知 | 未知 | 未知 |
getLayers | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
getPose | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
hardwareUnitId | 不支持 | 不支持 | 未知 | 未知 | 未知 | 未知 | 未知 |
isConnected | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
isPresenting | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
requestAnimationFrame | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
requestPresent | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
resetPose | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
stageParameters | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
submitFrame | 不支持 | 56 — 80123 | 未知 | 55 | 未知 | 未知 | 未知 |
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 团队提供的演示,下载和其他资源。