WebVR API
已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。
非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。
注意: 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 从未被批准为网络标准,已被弃用,取而代之的是 WebXR 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,特别是 Gamepad Extensions API 在 WebVR 应用程序中使用,后者增加了用于访问控制器姿态、触觉反馈器等 API 功能。
注意:我们的 将 VR 控制器与 WebVR 结合使用文章解释了如何将 VR 控制器与 WebVR 应用程序结合使用的基础知识。
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 Device API 取代。它不再有望成为标准。
在所有浏览器都实现新的 WebXR API 之前,建议依靠 A-Frame、Babylon.js 或 Three.js 等框架,或 polyfill 来开发可在所有浏览器上运行的 WebXR 应用程序。有关更多信息,请阅读 Meta 的从 WebVR 移植到 WebXR 指南。
浏览器兼容性
加载中…
另见
- A-Frame — 用于构建 VR 体验的开源 Web 框架。
- webvr.info — 关于 WebVR、浏览器设置和社区的最新信息。
- threejs-vr-boilerplate — 一个有用的启动模板,用于编写 WebVR 应用程序。
- Web VR polyfill — WebVR 的 JavaScript 实现。
- WebVR Directory — 高质量 WebVR 网站列表。