VRLayerInit

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

非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。

WebVR API 的 VRLayerInit 字典代表一个您想在 VR 显示器中呈现的内容层(一个 HTMLCanvasElementOffscreenCanvas)。

注意:此字典是旧的 WebVR API 的一部分。它已被 WebXR Device API 取代。

您可以使用 VRDisplay.getLayers() 来检索 VRLayerInit 对象,并使用 VRDisplay.requestPresent() 方法来呈现它们。

实例属性

VRLayerInit.leftBounds 已弃用

定义了由 VRDisplay 呈现的画布的左纹理边界。

VRLayerInit.rightBounds 已弃用

定义了由 VRDisplay 呈现的画布的右纹理边界。

VRLayerInit.source 已弃用

定义了在调用 VRDisplay.submitFrame() 时由 VRDisplay 呈现的画布。

示例

js
// currently returns an empty array
let layers = vrDisplay.getLayers();

if (navigator.getVRDisplays) {
  console.log("WebVR 1.1 supported");
  // Then get the displays attached to the computer
  navigator.getVRDisplays().then((displays) => {
    // If a display is available, use it to present the scene
    if (displays.length > 0) {
      vrDisplay = displays[0];
      console.log("Display found");
      // Starting the presentation when the button is clicked: It can only be called in response to a user gesture
      btn.addEventListener("click", () => {
        vrDisplay.requestPresent([{ source: canvas }]).then(() => {
          console.log("Presenting to WebVR display");

          // Here it returns an array of VRLayerInit objects
          layers = vrDisplay.getLayers();

          // …
        });
      });
    }
  });
}

VRLayerInit 对象看起来像这样:

js
const init = {
  leftBounds: [
    /* … */
  ],
  rightBounds: [
    /* … */
  ],
  source: canvasReference,
};

注意:canvasReference 指的是 <canvas> 元素本身,而不是与该画布关联的 WebGL 上下文。其他两个成员是数组。

规范

此字典是旧的 WebVR API 的一部分,已被 WebXR Device API 取代。它已不再是标准化进程的一部分。

在所有浏览器都实现新的 WebXR API 之前,建议依靠 A-FrameBabylon.jsThree.js 等框架,或 polyfill 来开发可在所有浏览器上运行的 WebXR 应用程序。有关更多信息,请阅读 Meta 的从 WebVR 移植到 WebXR 指南。

浏览器兼容性

另见