WebVR API

已弃用:此功能不再推荐。尽管一些浏览器可能仍然支持它,但它可能已被从相关的 Web 标准中删除,可能正在被删除,或者可能仅出于兼容性目的而保留。避免使用它,如果可能,更新现有代码;请参阅此页面底部的兼容性表格,以指导您的决策。请注意,此功能可能随时停止工作。

非标准:此功能是非标准的,并且不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不会对每个用户都起作用。实现之间也可能存在很大的不兼容性,并且行为将来可能会发生变化。

注意:WebVR API 已被WebXR API取代。WebVR 从未被批准为标准,仅在极少数浏览器中默认实现并启用,并且支持少量设备。

WebVR 提供了对公开虚拟现实设备的支持——例如,Oculus Rift 或 HTC Vive 等头戴式显示器——到 Web 应用程序,使开发人员能够将显示器上的位置和移动信息转换为 3D 场景中的移动。这具有许多有趣的应用,从虚拟产品参观和交互式培训应用程序到沉浸式第一人称游戏。

概念和用法

连接到计算机的任何 VR 设备都将由Navigator.getVRDisplays()方法返回;每个设备都将由一个VRDisplay对象表示。

Sketch of a person in a chair with wearing goggles labelled "Head mounted display (HMD)" facing a monitor with a webcam labelled "Position sensor"

VRDisplay是 WebVR API 中的核心接口——通过它的属性和方法,您可以访问以下功能

  • 检索有用的信息,以便我们识别显示器、它具有的功能、与其关联的控制器等等。
  • 检索您希望在显示器中呈现的每个内容帧的帧数据,并以一致的速率提交这些帧以进行显示。
  • 启动和停止向显示器呈现内容。

一个典型的(简单的)WebVR 应用程序的工作原理如下

  1. Navigator.getVRDisplays()用于获取对您的 VR 显示器的引用。
  2. VRDisplay.requestPresent()用于开始向 VR 显示器呈现内容。
  3. WebVR 的专用VRDisplay.requestAnimationFrame()方法用于以显示器的正确刷新率运行应用程序的渲染循环。
  4. 在渲染循环内部,您获取显示当前帧所需的数据(VRDisplay.getFrameData()),绘制两次显示的场景——一次用于每只眼睛的视图,然后将渲染的视图提交到显示器以显示给用户(VRDisplay.submitFrame())。

此外,WebVR 1.1 在Window对象上添加了许多事件,以允许 JavaScript 对显示器状态的更改做出响应。

注意:您可以在我们的使用 WebVR APIWebVR 概念文章中了解更多关于 API 如何工作的信息。

API 可用性

WebVR API 从未被批准为 Web 标准,已被弃用,取而代之的是WebXR API,该 API 正在顺利进行标准化过程。因此,您应该尝试更新现有代码以使用较新的 API。通常,转换应该相当容易。

此外,在某些设备和/或浏览器上,WebVR 需要通过 HTTPS 连接在安全上下文中加载页面。如果页面不完全安全,则 WebVR 方法和函数将不可用。您可以通过检查Navigator方法getVRDisplays()是否为NULL来轻松测试这一点。

js
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 只读

返回关联的VRDisplayVRDisplay.displayId——VRDisplay控制显示场景的。

返回一个数组,其中包含当前正在呈现的每个VRDisplay对象(VRDisplay.ispresentingtrue)。

返回一个 Promise,该 Promise 解析为一个VRDisplay对象的数组,表示连接到计算机的任何可用的 VR 显示器。

窗口事件

vrdisplaypresentchange

当 VR 显示器的呈现状态发生变化时触发——即从呈现到不呈现或反之亦然。

vrdisplayconnect

当兼容的 VR 显示器连接到计算机时触发。

vrdisplaydisconnect

当兼容的 VR 显示器与计算机断开连接时触发。

vrdisplayactivate

当显示器能够向其呈现内容时触发。

vrdisplaydeactivate

当显示器无法再向其呈现内容时触发。

示例

您可以在以下位置找到一些示例

规范

此 API 在旧的WebVR API中指定,该 API 已被WebXR 设备 API取代。它不再有望成为标准。

在所有浏览器都实现新的WebXR API之前,建议依靠框架(如A-FrameBabylon.jsThree.js)或polyfill来开发可在所有浏览器中运行的 WebXR 应用程序[1]

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅