Start · Sprachen · JavaScript · Referenz · XRCubeLayer

XRCubeLayer

Schnittstelle

Kompositionsebene der WebXR Layers API. Der XR-Compositor legt eine Cube-Map mit sechs Flächen als unendlich ferne Umgebung um den Betrachter, zum Beispiel als Skybox.

seit JavaScript Experimentell: WebXR Layers API (u. a. Meta Quest Kategorie: webapi

Signatur

interface XRCubeLayer extends XRCompositionLayer

Beschreibung

XRCubeLayer gehört zur WebXR Layers API. Die Schnittstelle steht für eine Ebene aus einer Cube-Map mit sechs quadratischen Flächen. Der XR-Compositor legt diese Cube-Map um den Betrachter. Dabei nutzt er nur die Ausrichtung des zugehörigen Raums (space) und der Eigenschaft orientation, nicht aber dessen Position. Die Umgebung bewegt sich deshalb nicht mit, wenn der Kopf seine Position ändert, und wirkt unendlich weit entfernt. Das eignet sich für Skyboxen, Sternenhimmel oder 360°-Hintergründe.

Eine Skybox könnte man auch selbst in die Projektionsebene rendern. Die Cube-Ebene hat aber Vorteile: Der Compositor tastet sie erst bei der Bildsynthese direkt mit der Auflösung des Displays ab. Weil das doppelte Resampling entfällt, ist das Bild schärfer und weniger verzerrt, und die Bildwiederholrate bleibt stabiler. Eine statische Ebene (isStatic: true) füllt man nur einmal. Danach kostet sie praktisch keine Renderzeit mehr.

Es gibt keinen Konstruktor. So wird die Ebene erzeugt und benutzt:

  • Ebene mit XRWebGLBinding.createCubeLayer(init) erzeugen. Voraussetzungen sind ein WebGL2-Kontext mit xrCompatible: true und eine Sitzung, die mit dem Feature "layers" angefordert wurde.
  • Ebene mit XRSession.updateRenderState({ layers: [...] }) an die Sitzung übergeben.
  • In jedem Frame liefert XRWebGLBinding.getSubImage(layer, frame) ein XRWebGLSubImage. Dessen colorTexture ist eine Textur vom Typ TEXTURE_CUBE_MAP.

Eigene Eigenschaften: space (XRSpace, von dem nur die Ausrichtung zählt) und orientation (DOMPointReadOnly als Quaternion, les- und schreibbar). Außerdem feuert die Ebene das Ereignis redraw, wenn ihr Inhalt neu gezeichnet werden muss. Von XRCompositionLayer geerbt sind unter anderem layout, mipLevels, needsRedraw, blendTextureSourceAlpha, chromaticAberrationCorrection und destroy().

Parameter

Name Typ Default Beschreibung
$init.space Pflicht XRSpace Raum, an dem die Ebene ausgerichtet wird. Nur seine Ausrichtung zählt, die Position wird ignoriert.
$init.viewPixelWidth Pflicht number Breite jeder Würfelfläche in Pixeln. Muss gleich viewPixelHeight sein, weil die Flächen quadratisch sind.
$init.viewPixelHeight Pflicht number Höhe jeder Würfelfläche in Pixeln.
$init.orientation DOMPointReadOnly Identität (0, 0, 0, 1) Quaternion, mit dem der Würfel gegenüber space gedreht wird.
$init.layout "mono" | "stereo" "mono" "mono": eine Cube-Map für beide Augen. "stereo": je eine Cube-Map pro Auge. "stereo-left-right" und "stereo-top-bottom" sind nicht erlaubt.
$init.colorFormat GLenum gl.RGBA Farbformat der Textur, z. B. gl.RGBA oder gl.SRGB8_ALPHA8.
$init.depthFormat GLenum 0 (kein Tiefenpuffer) Optionales Format für den Tiefenpuffer. Bei Skyboxen meist unnötig.
$init.mipLevels number 1 Anzahl der Mipmap-Stufen.
$init.isStatic boolean false Bei true wird der Inhalt nur einmal gezeichnet, bzw. erneut nach einem redraw-Ereignis. Das spart viel Renderzeit.
$init.clearOnAccess boolean true Gibt an, ob die Textur bei jedem Aufruf von getSubImage() geleert wird.

Rückgabewert

Typ
XRCubeLayer
Beschreibung
Wird von XRWebGLBinding.createCubeLayer(init) zurückgegeben. Die oben aufgeführten Parameter sind die Felder des Init-Objekts.