XRViewerPose

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Das XRViewerPose Interface der WebXR Device API repräsentiert die Pose (die Position und Orientierung) des Blickpunkts eines Betrachters auf die Szene. Jedes XRViewerPose kann mehrere Ansichten haben, um beispielsweise den leichten Abstand zwischen dem linken und rechten Auge darzustellen.

Diese Ansicht kann alles repräsentieren, von der Perspektive eines XR-Headsets des Benutzers bis hin zur Sichtweise, die durch die Bewegung eines Avatars mittels Maus und Tastatur auf dem Bildschirm dargestellt wird, bis hin zu einer virtuellen Kamera, die die Szene für einen Zuschauer erfasst.

XRPose XRViewerPose

Instanz-Eigenschaften

Zusätzlich zu den von XRPose geerbten Eigenschaften umfasst XRViewerPose die folgenden:

views Nur lesbar

Ein Array von XRView-Objekten, eines für jeden Blickpunkt auf die Szene, der benötigt wird, um die Szene für den Benutzer darzustellen. Ein typisches Headset bietet eine Betrachterpose mit zwei Ansichten, deren eye-Eigenschaft entweder left oder right ist, was angibt, welches Auge diese Ansicht repräsentiert. Zusammen können diese Ansichten den 3D-Effekt reproduzieren, wenn sie auf dem XR-Gerät angezeigt werden.

Gebrauchshinweise

Das XRViewerPose-Objekt wird verwendet, um den Zustand eines Betrachters einer WebXR-Szene zu beschreiben, wie er durch die XR-Hardware des Benutzers verfolgt wird. Der Betrachter kann die virtuelle Darstellung des Benutzers sein oder ein anderes Gerät oder eine andere Schnittstelle repräsentieren, das als Quelle einer Position und Orientierung dient, die einen Blick auf die Szene ergibt. Beispielsweise könnte jeder Spieler in einem MMORPG eine Instanz von XRViewerPose haben, um eine Möglichkeit bereitzustellen, zu berechnen, was sie sehen können; wenn das Spiel einen Mechanismus bietet, der dem Spieler mitteilt, ob ein anderer Spieler ihn sieht oder er einen anderen Spieler sieht, wird diese Information entscheidend.

Ein XRViewerPose wird immer relativ zu einem vorhandenen XRReferenceSpace erhalten und referenziert. Dies stellt sicher, dass Positionen und Orientierungen unter Verwendung des erwarteten relativen Koordinatensystems angegeben werden.

Um eine Szene mit der XRViewerPose, die den Kopf des Benutzers darstellt, zu rendern, würde man über die Ansichten im views-Array iterieren und sie nacheinander rendern. Durch Aufrufen von viewport() im WebGL-Kontext, unter Angabe der XRView als Eingabe, können Sie die Ansicht erhalten, die beim Rendern verwendet werden soll, um den Rahmen für dieses Auge in den korrekten Teil der Zeichenoberfläche zu zeichnen.

Auch wenn die Szene für Zuschauer oder andere Spieler in einem Multiplayer-Spiel gerendert wird, kann der transform der XRViewerPose verwendet werden, um sowohl die Platzierung als auch die Blickrichtung der anderen Spieler im Spiel zu bestimmen, damit sie am richtigen Ort mit der richtigen Blickrichtung gezeichnet werden können.

Die Pose des Betrachters für den Animationsframe, der durch XRFrame dargestellt wird, kann durch Aufrufen der getViewerPose()-Methode des Frames erhalten werden, wobei der Referenzraum angegeben wird, in dem die Position des Ursprungs berechnet werden soll. Die zurückgegebene XRViewerPose gibt an, wo sich der Betrachter befindet und in welche Richtung er blickt, zu dem Zeitpunkt, an dem der Frame stattfindet.

Beispiele

In diesem Beispiel – Teil des Codes zum Rendern eines XRFrame – wird getViewerPose() aufgerufen, um eine XRViewerPose mit demselben Referenzraum zu erhalten, den der Code als Basisreferenzraum verwendet. Wenn eine gültige Pose zurückgegeben wird, wird der Frame durch Löschen des Backbuffers und Rendern jeder der Ansichten in der Pose gerendert; dabei handelt es sich höchstwahrscheinlich um die Ansichten für das linke und rechte Auge.

js
const pose = frame.getViewerPose(xrReferenceSpace);

if (pose) {
  const glLayer = xrSession.renderState.baseLayer;

  gl.bindFrameBuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
  gl.clearColor(0, 0, 0, 1);
  gl.clearDepth(1);
  gl.clear(gl.COLOR_BUFFER_BIT, gl.DEPTH_BUFFER_BIT);

  for (const view of pose.views) {
    const viewport = glLayer.getViewport(view);
    gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);

    /* render the scene for the eye view.eye */
  }
}

Das Übergeben jeder view an getViewport() gibt das WebGL-Viewport zurück, das angewendet werden muss, um das gerenderte Ergebnis korrekt im Framebuffer zu positionieren, damit es auf das entsprechende Auge auf dem Ausgabegerät gerendert wird.

Dieser Code stammt aus Einen Frame zeichnen in unserem "Bewegung und Bewegung" WebXR-Beispiel. Sie können dort mehr Kontext sehen und viel mehr auf jener Seite erfahren.

Spezifikationen

Specification
WebXR Device API
# xrviewerpose-interface

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch