XRSystem: Methode requestSession()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Die Methode requestSession()
des XRSystem
-Interfaces gibt ein promise
zurück, das ein XRSession
-Objekt auflöst, mit dem Sie den angeforderten WebXR-Sitzungstyp verwalten können.
Während nur eine immersive VR-Sitzung gleichzeitig aktiv sein kann, können mehrere Inline-Sitzungen gleichzeitig laufen.
Syntax
requestSession(mode)
requestSession(mode, options)
Parameter
mode
-
Ein
String
, der den XR-Sitzungsmodus definiert. Unterstützte Modi sind:-
Experimentell
immersive-ar
: Der Ausgabe der Sitzung wird exklusiver Zugriff auf das immersive Gerät gewährt, jedoch wird der gerenderte Inhalt mit der realen Umgebung vermischt. DerenvironmentBlendMode
der Sitzung gibt die Methode an, mit der die Inhalte zusammengeführt werden. immersive-vr
: Gibt an, dass die gerenderte Sitzung in VR-Modus auf einem immersiven XR-Gerät angezeigt wird; sie soll nicht überlagert oder in die umgebende Umgebung integriert werden. DerenvironmentBlendMode
wird im Idealfall aufopaque
erwartet, könnte aberadditive
sein, falls die Hardware dies erfordert.inline
: Die Ausgabe wird inline innerhalb des Kontextes eines Elements in einem Standard-HTML-Dokument präsentiert, anstatt den gesamten visuellen Raum einzunehmen. Inline-Sitzungen können entweder im Mono- oder Stereo-Modus dargestellt werden und können mit oder ohne Viewer-Tracking verfügbar sein. Inline-Sitzungen erfordern keine spezielle Hardware und sollten auf jedem User-Agent verfügbar sein, der die WebXR-API unterstützt.
-
Experimentell
options
Optional-
Ein Objekt zur Konfiguration der
XRSession
. Wenn keine enthalten sind, verwendet das Gerät eine Standard-Feature-Konfiguration für alle Optionen.requiredFeatures
Optional: Ein Array von Werten, die die zurückgegebeneXRSession
unterstützen muss. Siehe Sitzungsfeatures unten.optionalFeatures
Optional: Ein Array von Werten, die Features identifizieren, welche die zurückgegebeneXRSession
optional unterstützen kann. Siehe Sitzungsfeatures unten.domOverlay
Optional: Ein Objekt mit einer erforderlichenroot
-Eigenschaft, die das Überlagerungselement angibt, das dem Benutzer als Inhalt der DOM-Überlagerung angezeigt wird. Siehe das Beispiel unten.depthSensing
Optional: Ein Objekt mit zwei erforderlichen EigenschaftenusagePreference
unddataFormatPreference
zur Konfiguration der Tiefenerfassung. Siehe das Beispiel unten.
Rückgabewert
Ausnahmen
Diese Methode wirft keine echten Ausnahmen; stattdessen wird das zurückgegebene Versprechen abgelehnt und ein DOMException
übergeben, dessen name
einer der folgenden ist:
InvalidStateError
DOMException
-
Wird zurückgegeben, wenn der angeforderte Sitzungsmodus
immersive-vr
ist, aber bereits eine immersive VR-Sitzung entweder aktuell aktiv ist oder gerade eingerichtet wird. Es kann immer nur eine immersive VR-Sitzung geben. NotSupportedError
DOMException
-
Wird zurückgegeben, wenn kein WebXR-kompatibles Gerät verfügbar ist oder das Gerät den angegebenen
sessionMode
nicht unterstützt; dies kann auch ausgelöst werden, wenn eine der erforderlichen Optionen nicht unterstützt wird. SecurityError
DOMException
-
Wird zurückgegeben, wenn die Erlaubnis zum Betreten des angegebenen XR-Modus verweigert wird. Dies kann aus mehreren Gründen geschehen, die ausführlicher in Berechtigungen und Sicherheit behandelt werden.
Sitzungsfunktionen
Die folgenden Sitzungsfunktionen und Referenzräume können entweder als optionalFeatures
oder requiredFeatures
angefordert werden.
anchors
-
Ermöglicht die Verwendung von
XRAnchor
-Objekten. bounded-floor
-
Ähnlich dem Typ
local
, außer dass der Benutzer nicht erwartet wird, sich außerhalb eines vorgegebenen Bereichs zu bewegen, der von derboundsGeometry
im zurückgegebenen Objekt definiert wird. depth-sensing
-
Ermöglicht die Fähigkeit, Tiefeninformationen mit Hilfe von
XRDepthInformation
-Objekten zu erhalten. dom-overlay
-
Ermöglicht das Festlegen eines DOM-Überlagerungselements, das dem Benutzer angezeigt wird.
hand-tracking
-
Ermöglicht artikulierte Handpose-Informationen von handbasierten Eingabegeräten (siehe
XRHand
undXRInputSource.hand
). hit-test
-
Ermöglicht Funktionen für Treffsicherheitstests gegen reale Geometrie.
layers
-
Ermöglicht die Fähigkeit, verschiedene Schichtenarten zu erstellen (außer
XRProjectionLayer
). light-estimation
-
Ermöglicht die Schätzung von Umgebungslichtbedingungen mit Hilfe von
XRLightEstimate
-Objekten. local
-
Ermöglicht einen Tracking-Raum, dessen nativer Ursprung sich nahe der Position des Betrachters befindet, als die Sitzung erstellt wurde. Die genaue Position hängt von der zugrunde liegenden Plattform und Implementierung ab. Der Benutzer wird nicht erwartet, sich viel oder überhaupt über seinen Ausgangsposition hinaus zu bewegen, und das Tracking ist für diesen Anwendungsfall optimiert.
local-floor
-
Ähnlich dem Typ
local
, außer dass die Startposition an einem sicheren Ort für den Betrachter zum Stehen platziert wird, wobei der Wert der y-Achse bei 0 auf Bodenhöhe liegt. Wenn diese Bodenhöhe nicht bekannt ist, wird der User-Agent die Bodenhöhe schätzen. Wenn die geschätzte Bodenhöhe ungleich null ist, wird erwartet, dass der Browser sie so abrundet, dass Fingerprinting vermieden wird (wahrscheinlich auf den nächsten Zentimeter). secondary-views
-
Ermöglicht
XRView
-Objekte als sekundäre Ansichten. Dies kann für First-Person-Observer-Ansichten verwendet werden, die für Videoaufnahmen verwendet werden, oder "Quad-Ansichten", bei denen es zwei Ansichten pro Auge gibt, mit unterschiedlichen Auflösungen und Blickwinkeln. unbounded
-
Ermöglicht einen Tracking-Raum, der dem Benutzer völlige Bewegungsfreiheit erlaubt, möglicherweise über extrem weite Entfernungen von ihrem Ausgangspunkt. Der Betrachter wird überhaupt nicht getrackt; das Tracking ist für Stabilität um die aktuelle Position des Benutzers optimiert, sodass der native Ursprung bei Bedarf abdriften kann, um diese Notwendigkeit zu berücksichtigen.
viewer
-
Ermöglicht einen Tracking-Raum, dessen nativer Ursprung die Position und Orientierung des Betrachters verfolgt.
Sicherheit
Mehrere Sitzungsfunktionen und verschiedene Referenzräume haben minimale Sicherheits- und Datenschutzanforderungen, wie z. B. die Einholung der Zustimmung des Benutzers und/oder die Anforderung des Permissions-Policy
: xr-spatial-tracking
-Direktive. Siehe auch Berechtigungen und Sicherheit für weitere Details.
Sitzungsfunktion | Benutzerzustimmungsanforderung | Berechtigungsrichtlinienanforderung |
---|---|---|
bounded-floor |
Immer erforderlich | xr-spatial-tracking |
depth-sensing |
— | xr-spatial-tracking |
hand-tracking |
Immer erforderlich | — |
hit-test |
— | xr-spatial-tracking |
local |
Immer erforderlich für Inline-Sitzungen | xr-spatial-tracking |
local-floor |
Immer erforderlich | xr-spatial-tracking |
unbounded |
Immer erforderlich | xr-spatial-tracking |
viewer |
Immer erforderlich | — |
Siehe auch transiente Benutzeraktivierung.
Beispiele
Erstellen einer immersiven VR-Sitzung
Das folgende Beispiel ruft requestSession()
auf, um eine
"immersive-vr"
-Sitzung anzufordern. Wenn das Promise
aufgelöst wird, richtet es eine Sitzung ein und startet die Animationsschleife.
navigator.xr
.requestSession("immersive-vr")
.then((xrSession) => {
xrSession.addEventListener("end", onXRSessionEnded);
// Do necessary session setup here.
// Begin the session's animation loop.
xrSession.requestAnimationFrame(onXRAnimationFrame);
})
.catch((error) => {
// "immersive-vr" sessions are not supported
console.error(
"'immersive-vr' isn't supported, or an error occurred activating VR!",
);
});
Überprüfung der WebXR-Unterstützung und Verwenden eines Schalters zum Starten des VR-Modus
Das folgende Beispiel zeigt, wie isSessionSupported()
und
requestSession()
verwendet werden. Zuerst wird überprüft, ob WebXR verfügbar ist, indem die Existenz von navigator.xr
überprüft wird. Anschließend wird isSessionSupported()
aufgerufen und die gewünschte Sitzungsoption übergeben, bevor die Steuerungen für den Eintritt in XR aktiviert werden. Das Hinzufügen von Steuerelementen ist ein notwendiger Schritt, da der Eintritt in XR eine Benutzeraktion erfordert. Schließlich ruft die Methode onButtonClicked()
requestSession()
mit derselben Sitzungsoption auf, die auch an isSessionSupported()
übergeben wurde.
if (navigator.xr) {
navigator.xr.isSessionSupported("immersive-vr").then((isSupported) => {
if (isSupported) {
immersiveButton.addEventListener("click", onButtonClicked);
immersiveButton.textContent = "Enter XR";
immersiveButton.disabled = false;
} else {
console.error("WebXR doesn't support immersive-vr mode!");
}
});
} else {
console.error("WebXR is not available!");
}
function onButtonClicked() {
if (!xrSession) {
navigator.xr.requestSession("immersive-vr").then((session) => {
xrSession = session;
// onSessionStarted() not shown for reasons of brevity and clarity.
onSessionStarted(xrSession);
});
} else {
// Button is a toggle button.
xrSession.end().then(() => (xrSession = null));
}
}
Anfordern einer Sitzung mit erforderlichen Funktionen
Erfordert eine unbegrenzte Erfahrung, bei der der Benutzer sich frei in seiner physischen Umgebung bewegen kann:
navigator.xr.requestSession("immersive-vr", {
requiredFeatures: ["unbounded"],
});
Anfordern einer Sitzung mit DOM-Überlagerung
navigator.xr.requestSession("immersive-ar", {
optionalFeatures: ["dom-overlay"],
domOverlay: {
root: document.getElementById("xr-overlay"),
},
});
Anfordern einer Tiefenerfassungssitzung
Hier kann der Anrufer sowohl CPU- als auch GPU-optimierte Nutzung sowie die Formate "luminance-alpha" und "float32" behandeln. Die Reihenfolge gibt die Präferenz für CPU und "luminance-alpha" an:
navigator.xr.requestSession("immersive-ar", {
requiredFeatures: ["depth-sensing"],
depthSensing: {
usagePreference: ["cpu-optimized", "gpu-optimized"],
dataFormatPreference: ["luminance-alpha", "float32"],
},
});
Spezifikationen
Specification |
---|
WebXR Device API # dom-xrsystem-requestsession |