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, bevor Sie diese produktiv verwenden.

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

js
updateRenderState()
updateRenderState(state)

Parameter

state Optional

Ein optionales Objekt zur Konfiguration des XRRenderState. Wenn keines bereitgestellt wird, wird eine Standardkonfiguration verwendet.

  • baseLayer Optional: Ein XRWebGLLayer-Objekt, aus dem der WebXR-Kompositor das Bildmaterial beziehen wird. Dies ist standardmäßig null. Um andere (oder mehrere) Ebenen anzugeben, sehen Sie sich die layers-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 durch depthNear und depthFar 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 eine inline 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 Sitzungen null ist. Der Standardwert ist andernfalls π * 0,5 (die Hälfte des Werts von Pi).
  • layers Optional: Ein geordnetes Array von XRLayer-Objekten, die die Ebenen angeben, die dem XR-Gerät präsentiert werden sollen. Das Setzen von layers überschreibt baseLayer, falls vorhanden, wobei baseLayer null meldet. Die Reihenfolge der angegebenen Ebenen ist "hinten-nach-vorne". Für Alpha-Blending von Ebenen siehe die XRCompositionLayer.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 einer XRSession erstellt, die nicht diejenige ist, auf der updateRenderState() aufgerufen wurde.
  • Die inlineVerticalFieldOfView-Option wurde eingestellt, aber die Sitzung ist immersiv und erlaubt daher nicht die Verwendung dieser Eigenschaft.
NotSupportedError DOMException

Wird unter einer der folgenden Bedingungen ausgelöst:

  • Die layers-Option wird in einer Sitzung verwendet, die ohne die layers-Funktion erstellt wurde.
  • Sowohl die baseLayer- als auch die layers-Optionen sind angegeben.
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.

js
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.

js
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

Siehe auch