Signatur
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 mitxrCompatible: trueund 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)einXRWebGLSubImage. DessencolorTextureist eine Textur vom TypTEXTURE_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
XRWebGLBinding.createCubeLayer(init) zurückgegeben. Die oben aufgeführten Parameter sind die Felder des Init-Objekts.