VRDisplay: requestPresent() Methode

Veraltet: Diese Funktion wird nicht mehr empfohlen. Obwohl einige Browser sie möglicherweise noch unterstützen, kann sie bereits aus den relevanten Webstandards entfernt worden sein, befindet sich im Prozess der Entfernung oder wird nur aus Kompatibilitätsgründen beibehalten. Vermeiden Sie die Verwendung und aktualisieren Sie gegebenenfalls bestehenden Code; siehe die Kompatibilitätstabelle am Ende dieser Seite, um Ihre Entscheidung zu treffen. Beachten Sie, dass diese Funktion jederzeit nicht mehr funktionieren kann.

Kein Standard: Diese Funktion ist nicht standardisiert und befindet sich nicht im Standardisierungsprozess. Verwenden Sie sie nicht auf Produktionsseiten, die auf das Web ausgerichtet sind: Sie wird nicht für alle Benutzer funktionieren. Außerdem kann es große Inkompatibilitäten zwischen Implementierungen geben und das Verhalten kann sich in Zukunft ändern.

Die requestPresent() Methode des VRDisplay Interfaces startet das Präsentieren einer Szene durch das VRDisplay.

Hinweis: Diese Methode war Teil der alten WebVR API. Sie wurde durch die WebXR Device API ersetzt.

Syntax

js
requestPresent(layers)

Parameter

layers

Ein Array von VRLayerInit Objekten, die die Szene darstellen, die Sie präsentieren möchten. Zurzeit kann dies ein Minimum von 0 und ein Maximum von 1 sein.

Rückgabewert

Ein Versprechen, das aufgelöst wird, sobald die Präsentation begonnen hat. Es gibt eine Reihe von Regeln bezüglich der Erfüllung oder Ablehnung des Versprechens:

  • Wenn VRDisplayCapabilities.canPresent falsch ist oder wenn das VRLayer-Array mehr als VRDisplayCapabilities.maxLayers Schichten enthält, wird das Versprechen abgelehnt.
  • Wenn das VRDisplay bereits präsentiert, wenn requestPresent() aufgerufen wird, wird das VRLayer-Array, das präsentiert wird, aktualisiert.
  • Wenn ein Aufruf von requestPresent() abgelehnt wird, während das VRDisplay bereits präsentiert, wird die Präsentation beendet.
  • Wenn requestPresent() außerhalb einer Engagement-Geste aufgerufen wird, wird das Versprechen abgelehnt, es sei denn, das VRDisplay präsentierte bereits. Diese Engagement-Geste ist auch ausreichend, um requestPointerLock() Aufrufe zu erlauben, bis die Präsentation beendet ist.

Beispiele

js
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", () => {
        if (btn.textContent === "Start VR display") {
          vrDisplay.requestPresent([{ source: canvas }]).then(() => {
            console.log("Presenting to WebVR display");

            // Set the canvas size to the size of the vrDisplay viewport

            const leftEye = vrDisplay.getEyeParameters("left");
            const rightEye = vrDisplay.getEyeParameters("right");

            canvas.width =
              Math.max(leftEye.renderWidth, rightEye.renderWidth) * 2;
            canvas.height = Math.max(
              leftEye.renderHeight,
              rightEye.renderHeight,
            );

            // stop the normal presentation, and start the vr presentation
            window.cancelAnimationFrame(normalSceneFrame);
            drawVRScene();

            btn.textContent = "Exit VR display";
          });
        } else {
          vrDisplay.exitPresent();
          console.log("Stopped presenting to WebVR display");

          btn.textContent = "Start VR display";

          // Stop the VR presentation, and start the normal presentation
          vrDisplay.cancelAnimationFrame(vrSceneFrame);
          drawScene();
        }
      });
    }
  });
}

Hinweis: Sie können diesen kompletten Code unter raw-webgl-example sehen.

Spezifikationen

Diese Methode war Teil der alten WebVR API, die durch die WebXR Device API ersetzt wurde. Sie ist nicht mehr auf dem Weg, ein Standard zu werden.

Bis alle Browser die neuen WebXR APIs implementiert haben, wird empfohlen, auf Frameworks wie A-Frame, Babylon.js oder Three.js oder ein Polyfill zu setzen, um WebXR-Anwendungen zu entwickeln, die in allen Browsern funktionieren. Lesen Sie Metas Leitfaden zum Portieren von WebVR zu WebXR für mehr Informationen.

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch