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 Render-Zustand (XRRenderState
) angewendet werden sollen, bevor das nächste Frame gerendert wird.
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 Bilder erhält. Der Standardwert istnull
. Um andere (oder mehrere) Ebenen anzugeben, siehe dielayers
-Option.depthFar
Optional: Ein Gleitkommawert, der die Entfernung in Metern vom Betrachter zur Fernsicht-Ebene (far clip plane) angibt, eine Ebene, die parallel zur Anzeigefläche liegt und jenseits derer keine weitere Darstellung erfolgt. Alle Renderings finden zwischen den durchdepthNear
unddepthFar
angegebenen Entfernungen statt. Der Standardwert ist 1000 Meter (1 Kilometer).depthNear
Optional: Ein Gleitkommawert, der die Entfernung in Metern vom Betrachter zu einer Ebene angibt, die parallel zur Anzeigefläche ist und als Nahsicht-Ebene dient. Kein Teil der Szene wird auf der Betrachterseite dieser Ebene gerendert. Der Standardwert ist 0,1 Meter (10 Zentimeter).inlineVerticalFieldOfView
Optional: Ein Gleitkommawert, der das Standard-Sichtfeld in Radiant angibt, das bei der Berechnung der Projektionsmatrix für eineinline
-XRSession
verwendet wird. Die Berechnung der Projektionsmatrix berücksichtigt auch das Seitenverhältnis der Ausgabefläche. Diese Eigenschaft darf nicht für immersive Sitzungen angegeben werden, daher ist der Wert standardmäßignull
für immersive Sitzungen. Der Standardwert ist ansonsten π * 0,5 (die Hälfte 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 eines vorhanden ist, 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 in einer der folgenden Situationen ausgelöst:
- Die
XRSession
ist bereits beendet, sodass der Render-Zustand nicht mehr geändert werden kann. baseLayer
wurde von einer anderenXRSession
als derjenigen erstellt, auf derupdateRenderState()
aufgerufen wurde.- Die
inlineVerticalFieldOfView
-Option wurde festgelegt, aber die Sitzung ist immersiv und erlaubt diese Eigenschaft daher nicht.
- Die
NotSupportedError
DOMException
-
Wird in einer der folgenden Situationen ausgelöst:
- Die
layers
-Option wird in einer Sitzung verwendet, die ohne daslayers
-Feature 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. Anschließend wird die Methode updateRenderState()
aufgerufen, um die neue 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),
});
}
Festlegen des layers
-Arrays
Um WebXR-Ebenen zu verwenden, muss die XR-Sitzung mit dem layers
-Feature-Deskriptor erstellt werden (siehe XRSystem.requestSession()
). Sie können dann verschiedene WebXR-Ebenen erstellen, wie
Andere Ebenen, wie z. B. XRProjectionLayer
oder XRWebGLLayer
, sind ebenfalls verfügbar.
Ebenen werden in der Reihenfolge präsentiert, in der sie im layers
-Array angegeben sind, mit Ebenen in "hinten nach vorne"-Reihenfolge.
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 |