Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
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 insicheren Kontexten (HTTPS) in einigen oder allenunterstützenden Browsern verfügbar.
DasXRViewerPose Interface der WebXR Device API repräsentiert die Pose (die Position und Orientierung) des Blickpunkts eines Betrachters auf die Szene. JedesXRViewerPose 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.
In diesem Artikel
Instanz-Eigenschaften
Zusätzlich zu den vonXRPose geerbten Eigenschaften umfasstXRViewerPose die folgenden:
viewsSchreibgeschütztEin 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, dereneye-Eigenschaft entwederleftoderrightist, 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
DasXRViewerPose-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 vonXRViewerPose 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.
EinXRViewerPose wird immer relativ zu einem vorhandenenXRReferenceSpace erhalten und referenziert. Dies stellt sicher, dass Positionen und Orientierungen unter Verwendung des erwarteten relativen Koordinatensystems angegeben werden.
Um eine Szene mit derXRViewerPose, die den Kopf des Benutzers darstellt, zu rendern, würde man über die Ansichten imviews-Array iterieren und sie nacheinander rendern. Durch Aufrufen vonviewport() im WebGL-Kontext, unter Angabe derXRView 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 dertransform derXRViewerPose 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 durchXRFrame dargestellt wird, kann durch Aufrufen dergetViewerPose()-Methode des Frames erhalten werden, wobei der Referenzraum angegeben wird, in dem die Position des Ursprungs berechnet werden soll. Die zurückgegebeneXRViewerPose 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 einesXRFrame – wirdgetViewerPose() aufgerufen, um eineXRViewerPose 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.
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 jederview angetViewport() 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 ausEinen 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> |