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
stateOptional-
Ein optionales Objekt zur Konfiguration des
XRRenderState. Wenn keines bereitgestellt wird, wird eine Standardkonfiguration verwendet.baseLayerOptional: EinXRWebGLLayer-Objekt, aus dem der WebXR-Kompositor Bilder erhält. Der Standardwert istnull. Um andere (oder mehrere) Ebenen anzugeben, siehe dielayers-Option.depthFarOptional: 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 durchdepthNearunddepthFarangegebenen Entfernungen statt. Der Standardwert ist 1000 Meter (1 Kilometer).depthNearOptional: 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).inlineVerticalFieldOfViewOptional: Ein Gleitkommawert, der das Standard-Sichtfeld in Radiant angibt, das bei der Berechnung der Projektionsmatrix für eineinline-XRSessionverwendet 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äßignullfür immersive Sitzungen. Der Standardwert ist ansonsten π * 0,5 (die Hälfte von Pi).layersOptional: 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, wobeibaseLayernullmeldet. Die Reihenfolge der angegebenen Ebenen ist "hinten nach vorne". Für Alpha-Blending von Ebenen siehe dieXRCompositionLayer.blendTextureSourceAlpha-Eigenschaft.
Rückgabewert
Keiner (undefined).
Ausnahmen
InvalidStateErrorDOMException-
Wird in einer der folgenden Situationen ausgelöst:
- Die
XRSessionist bereits beendet, sodass der Render-Zustand nicht mehr geändert werden kann. baseLayerwurde von einer anderenXRSessionals derjenigen erstellt, auf derupdateRenderState()aufgerufen wurde.- Die
inlineVerticalFieldOfView-Option wurde festgelegt, aber die Sitzung ist immersiv und erlaubt diese Eigenschaft daher nicht.
- Die
NotSupportedErrorDOMException-
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> |
Browser-Kompatibilität
Loading…