XRSession: updateRenderState() Methode
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 updateRenderState()
-Methode der XRSession
-Schnittstelle der WebXR API plant Änderungen, die auf den aktiven Renderzustand (XRRenderState
) vor dem Rendern des nächsten Frames angewendet werden sollen.
Syntax
updateRenderState()
updateRenderState(state)
Parameter
state
Optional-
Ein optionales Objekt zur Konfiguration des
XRRenderState
. Wenn keines bereitgestellt wird, wird eine Standardkonfiguration verwendet.baseLayer
Optional: EinXRWebGLLayer
-Objekt, aus dem der WebXR-Kompositor das Bildmaterial beziehen wird. Dies ist standardmäßignull
. Um andere (oder mehrere) Ebenen anzugeben, sehen Sie sich dielayers
-Option an.depthFar
Optional: Ein Gleitkommawert, der den Abstand in Metern vom Betrachter zur entfernten Clipping-Ebene angibt, einer Ebene, die parallel zur Anzeigefläche liegt und über die hinaus keine weitere Darstellung erfolgt. Alle Renderings finden zwischen den durchdepthNear
unddepthFar
angegebenen Entfernungen statt. Standardmäßig sind dies 1000 Meter (1 Kilometer).depthNear
Optional: Ein Gleitkommawert, der den Abstand in Metern vom Betrachter zu einer Ebene parallel zur Anzeigefläche angibt, die die nahe Clipping-Ebene ist. Kein Teil der Szene auf der Seite dieser Ebene des Betrachters wird dargestellt. Standardmäßig sind dies 0,1 Meter (10 Zentimeter).inlineVerticalFieldOfView
Optional: Ein Gleitkommawert, der das Standard-Sichtfeld in Bogenmaß angibt, das beim Berechnen der Projektionsmatrix für eineinline
XRSession
verwendet werden soll. Die Berechnung der Projektionsmatrix berücksichtigt auch das Seitenverhältnis des Ausgabecanvases. Diese Eigenschaft darf nicht für immersive Sitzungen angegeben werden, sodass der Wert standardmäßig für immersive Sitzungennull
ist. Der Standardwert ist andernfalls π * 0,5 (die Hälfte des Werts von Pi).layers
Optional: Ein geordnetes Array vonXRLayer
-Objekten, die die Ebenen angeben, die dem XR-Gerät präsentiert werden sollen. Das Setzen vonlayers
überschreibtbaseLayer
, falls vorhanden, wobeibaseLayer
null
meldet. Die Reihenfolge der angegebenen Ebenen ist "hinten-nach-vorne". Für Alpha-Blending von Ebenen siehe dieXRCompositionLayer.blendTextureSourceAlpha
-Eigenschaft.
Rückgabewert
Keiner (undefined
).
Ausnahmen
InvalidStateError
DOMException
-
Wird unter einer der folgenden Bedingungen ausgelöst:
- Die
XRSession
wurde bereits beendet, sodass Sie deren Renderzustand nicht ändern können. baseLayer
wurde von einerXRSession
erstellt, die nicht diejenige ist, auf derupdateRenderState()
aufgerufen wurde.- Die
inlineVerticalFieldOfView
-Option wurde eingestellt, aber die Sitzung ist immersiv und erlaubt daher nicht die Verwendung dieser Eigenschaft.
- Die
NotSupportedError
DOMException
-
Wird unter einer der folgenden Bedingungen ausgelöst:
- Die
layers
-Option wird in einer Sitzung verwendet, die ohne dielayers
-Funktion erstellt wurde. - Sowohl die
baseLayer
- als auch dielayers
-Optionen sind angegeben.
- Die
TypeError
-
Wird ausgelöst, wenn die
layers
-Option doppelte Instanzen enthält.
Beispiele
Hinzufügen eines baseLayer
Dieses Beispiel erstellt einen WebGL-Kontext, der mit einem immersiven XR-Gerät kompatibel ist, und verwendet ihn dann, um einen XRWebGLLayer
zu erstellen. Die Methode updateRenderState()
wird dann aufgerufen, um den neuen XRWebGLLayer
zuzuordnen.
function onXRSessionStarted(xrSession) {
let glCanvas = document.createElement("canvas");
let gl = glCanvas.getContext("webgl", { xrCompatible: true });
loadWebGLResources();
xrSession.updateRenderState({
baseLayer: new XRWebGLLayer(xrSession, gl),
});
}
Setzen des layers
-Arrays
Um WebXR-Schichten zu verwenden, muss die XR-Sitzung mit dem layers
-Feature-Deskriptor erstellt werden (siehe XRSystem.requestSession()
). Sie können dann verschiedene WebXR-Schichten erstellen wie
Andere Schichten wie XRProjectionLayer
oder XRWebGLLayer
sind ebenfalls verfügbar.
Schichten werden in der Reihenfolge, in der sie im layers
-Array angegeben sind, präsentiert, wobei die Schichten in "hinten-nach-vorne"-Reihenfolge gegeben sind.
const xrSession = navigator.xr.requestSession("immersive-ar", {
optionalFeatures: ["layers"],
});
function onXRSessionStarted(xrSession) {
const glCanvas = document.createElement("canvas");
const gl = glCanvas.getContext("webgl", { xrCompatible: true });
const xrGlBinding = new XRWebGLBinding(xrSession, gl);
const projectionLayer = new XRWebGLLayer(xrSession, gl);
const quadLayer = xrGlBinding.createQuadLayer({
pixelWidth: 1024,
pixelHeight: 1024,
});
xrSession.updateRenderState({
layers: [projectionLayer, quadLayer],
});
}
Spezifikationen
Specification |
---|
WebXR Device API # dom-xrsession-updaterenderstate |
Browser-Kompatibilität
BCD tables only load in the browser