WebVR API
已弃用:此功能不再推荐。尽管一些浏览器可能仍然支持它,但它可能已被从相关的 Web 标准中删除,可能正在被删除,或者可能仅出于兼容性目的而保留。避免使用它,如果可能,更新现有代码;请参阅此页面底部的兼容性表格,以指导您的决策。请注意,此功能可能随时停止工作。
非标准:此功能是非标准的,并且不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不会对每个用户都起作用。实现之间也可能存在很大的不兼容性,并且行为将来可能会发生变化。
注意:WebVR API 已被WebXR API取代。WebVR 从未被批准为标准,仅在极少数浏览器中默认实现并启用,并且支持少量设备。
WebVR 提供了对公开虚拟现实设备的支持——例如,Oculus Rift 或 HTC Vive 等头戴式显示器——到 Web 应用程序,使开发人员能够将显示器上的位置和移动信息转换为 3D 场景中的移动。这具有许多有趣的应用,从虚拟产品参观和交互式培训应用程序到沉浸式第一人称游戏。
概念和用法
连接到计算机的任何 VR 设备都将由Navigator.getVRDisplays()
方法返回;每个设备都将由一个VRDisplay
对象表示。
VRDisplay
是 WebVR API 中的核心接口——通过它的属性和方法,您可以访问以下功能
- 检索有用的信息,以便我们识别显示器、它具有的功能、与其关联的控制器等等。
- 检索您希望在显示器中呈现的每个内容帧的帧数据,并以一致的速率提交这些帧以进行显示。
- 启动和停止向显示器呈现内容。
一个典型的(简单的)WebVR 应用程序的工作原理如下
Navigator.getVRDisplays()
用于获取对您的 VR 显示器的引用。VRDisplay.requestPresent()
用于开始向 VR 显示器呈现内容。- WebVR 的专用
VRDisplay.requestAnimationFrame()
方法用于以显示器的正确刷新率运行应用程序的渲染循环。 - 在渲染循环内部,您获取显示当前帧所需的数据(
VRDisplay.getFrameData()
),绘制两次显示的场景——一次用于每只眼睛的视图,然后将渲染的视图提交到显示器以显示给用户(VRDisplay.submitFrame()
)。
此外,WebVR 1.1 在Window
对象上添加了许多事件,以允许 JavaScript 对显示器状态的更改做出响应。
注意:您可以在我们的使用 WebVR API和WebVR 概念文章中了解更多关于 API 如何工作的信息。
API 可用性
WebVR API 从未被批准为 Web 标准,已被弃用,取而代之的是WebXR API,该 API 正在顺利进行标准化过程。因此,您应该尝试更新现有代码以使用较新的 API。通常,转换应该相当容易。
此外,在某些设备和/或浏览器上,WebVR 需要通过 HTTPS 连接在安全上下文中加载页面。如果页面不完全安全,则 WebVR 方法和函数将不可用。您可以通过检查Navigator
方法getVRDisplays()
是否为NULL
来轻松测试这一点。
if (!navigator.getVRDisplays) {
console.error("WebVR is not available");
} else {
/* Use WebVR */
}
使用控制器:将 WebVR 与 Gamepad API 结合使用
许多 WebVR 硬件设置都配有与头显配套的控制器。这些可以通过Gamepad API在 WebVR 应用程序中使用,特别是Gamepad 扩展 API,它添加了用于访问控制器姿态、触觉执行器等 API 功能。
注意:我们的使用 VR 控制器与 WebVR文章解释了如何在 WebVR 应用程序中使用 VR 控制器的基础知识。
WebVR 接口
VRDisplay
-
表示此 API 支持的任何 VR 设备。它包括通用信息,例如设备 ID 和描述,以及用于开始呈现 VR 场景、检索眼睛参数和显示功能以及其他重要功能的方法。
VRDisplayCapabilities
-
描述
VRDisplay
的功能——其功能可用于执行 VR 设备功能测试,例如它能否返回位置信息。 VRDisplayEvent
-
表示与 WebVR 相关的事件的事件对象(请参阅下面列出的窗口事件)。
VRFrameData
-
表示渲染 VR 场景单个帧所需的所有信息;由
VRDisplay.getFrameData()
构造。 VRPose
-
表示给定时间戳(包括方向、位置、速度和加速度)的位置状态。
VREyeParameters
-
提供访问正确渲染每只眼睛的场景所需的所有信息,包括视野信息。
VRFieldOfView
-
表示由 4 个不同的度数值定义的视野,这些值描述了从中心点的视图。
VRLayerInit
-
表示要在
VRDisplay
中呈现的图层。 VRStageParameters
-
表示描述支持房间规模体验的设备的舞台区域的值。
其他接口的扩展
WebVR API 扩展了以下 API,并添加了列出的功能。
Gamepad
Gamepad.displayId
只读-
返回关联的
VRDisplay
的VRDisplay.displayId
——VRDisplay
控制显示场景的。
Navigator
-
返回一个数组,其中包含当前正在呈现的每个
VRDisplay
对象(VRDisplay.ispresenting
为true
)。 -
返回一个 Promise,该 Promise 解析为一个
VRDisplay
对象的数组,表示连接到计算机的任何可用的 VR 显示器。
窗口事件
vrdisplaypresentchange
-
当 VR 显示器的呈现状态发生变化时触发——即从呈现到不呈现或反之亦然。
vrdisplayconnect
-
当兼容的 VR 显示器连接到计算机时触发。
vrdisplaydisconnect
-
当兼容的 VR 显示器与计算机断开连接时触发。
vrdisplayactivate
-
当显示器能够向其呈现内容时触发。
vrdisplaydeactivate
-
当显示器无法再向其呈现内容时触发。
示例
您可以在以下位置找到一些示例
- webvr-tests——与 MDN WebVR 文档配套的非常简单的示例。
- Carmel 启动套件——与 Facebook 的 WebVR 浏览器 Carmel 配套的简单、注释良好的示例。
- WebVR.info 示例——更深入的示例以及源代码。
- A-Frame 主页——显示 A-Frame 用法的示例。
规范
此 API 在旧的WebVR API中指定,该 API 已被WebXR 设备 API取代。它不再有望成为标准。
在所有浏览器都实现新的WebXR API之前,建议依靠框架(如A-Frame、Babylon.js或Three.js)或polyfill来开发可在所有浏览器中运行的 WebXR 应用程序[1]。
浏览器兼容性
BCD 表格仅在浏览器中加载
另请参阅
- A-Frame——用于构建 VR 体验的开源 Web 框架。
- webvr.info——关于 WebVR、浏览器设置和社区的最新信息。
- threejs-vr-boilerplate — 用于编写 WebVR 应用的实用入门模板。
- Web VR polyfill — WebVR 的 JavaScript 实现。
- WebVR 目录 — 优质 WebVR 网站列表。