Signatur
Beschreibung
XREquirectLayer gehört zum Modul WebXR Layers der WebXR Device API. Die Schicht erwartet eine Textur in equirektangulärer Projektion. Das ist das übliche Format für 360°- und 180°-Panoramen, meist mit einem Seitenverhältnis von 2:1 (360°) oder 1:1 (180°). Die Textur rendert nicht Ihre Anwendung in eine Kugel-Geometrie, sondern der Kompositor des XR-Geräts projiziert sie selbst auf die Innenseite einer Kugel. Dabei tastet er die Textur nur einmal ab und passt die Darstellung direkt vor der Anzeige an die aktuelle Kopfhaltung an. Das Ergebnis ist meist schärfer, flimmert weniger und ruckelt kaum, auch wenn die Anwendung Frames auslässt.
Einen Konstruktor gibt es nicht. Eine WebGL-gestützte Instanz erzeugen Sie mit XRWebGLBinding.prototype.createEquirectLayer(init), eine videogestützte mit XRMediaBinding.prototype.createEquirectLayer(video, init). Danach übergeben Sie die Schicht mit XRSession.prototype.updateRenderState({ layers: [...] }) an die Sitzung. Bei WebGL-Schichten schreiben Sie die Pixel in die Farbtextur, die XRWebGLBinding.prototype.getSubImage(layer, frame) liefert. Dynamische Inhalte zeichnen Sie in jedem Frame neu. Statische Schichten (isStatic: true) zeichnen Sie einmal und dann erst wieder, wenn needsRedraw auf true steht oder das Ereignis redraw eintritt.
Eigene Eigenschaften (alle beschreibbar):
space(XRSpace): Referenzraum, an dem die Kugel verankert ist.transform(XRRigidTransform): Position und Ausrichtung des Kugelmittelpunkts relativ zuspace.radius(number): Kugelradius in Metern. Bei0liegt die Kugel unendlich weit entfernt, es gibt also keine Parallaxe.centralHorizontalAngle(number): horizontaler Öffnungswinkel im Bogenmaß, Standard2π.upperVerticalAngle/lowerVerticalAngle(number): obere und untere Grenze im Bogenmaß, Standardπ/2bzw.-π/2.
Von XRCompositionLayer erbt die Schnittstelle layout, mipLevels, needsRedraw, blendTextureSourceAlpha, forceMonoPresentation und destroy(). Von XRLayer und EventTarget kommt die Ereignisbehandlung, etwa für redraw über addEventListener("redraw", …) oder die Eigenschaft onredraw. Typische Einsatzfälle sind Panorama-Betrachter, 360°-Videos, Skyboxen und Hintergründe für Menüs in immersiven Sitzungen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $init.space Pflicht | XRSpace | Referenzraum, in dem die Kugel verankert ist, z. B. aus session.requestReferenceSpace("local"). |
|
| $init.viewPixelWidth Pflicht | number | Breite der Textur pro Ansicht in Pixeln (beim Equirect-Format meist doppelt so breit wie hoch). | |
| $init.viewPixelHeight Pflicht | number | Höhe der Textur pro Ansicht in Pixeln. | |
| $init.layout | "mono" | "stereo" | "stereo-left-right" | "stereo-top-bottom" | "mono" | Aufteilung der Textur auf die Augen. "default" ist bei dieser Schicht nicht erlaubt. |
| $init.transform | XRRigidTransform | Identität | Position und Ausrichtung des Kugelmittelpunkts relativ zu space. |
| $init.radius | number | 0 | Radius in Metern; 0 bedeutet unendlich (Skybox). |
| $init.centralHorizontalAngle | number | 2π (≈ 6.28318) | Horizontaler Abdeckungswinkel in Bogenmaß. |
| $init.upperVerticalAngle | number | π/2 (≈ 1.570795) | Oberer vertikaler Grenzwinkel in Bogenmaß. |
| $init.lowerVerticalAngle | number | -π/2 (≈ -1.570795) | Unterer vertikaler Grenzwinkel in Bogenmaß. |
| $init.isStatic | boolean | false | Bei true wird nur einmalig bzw. nach redraw gezeichnet, was Speicher und Rechenzeit spart. |
| $init.colorFormat | GLenum | gl.RGBA | Farbformat der Textur. |
| $init.depthFormat | GLenum | 0 (kein Tiefenpuffer) | Optionales Format des Tiefenpuffers. |
| $init.mipLevels | number | 1 | Anzahl der Mipmap-Stufen. |
| $init.textureType | "texture" | "texture-array" | "texture" | "texture-array" (nur WebGL 2) legt beide Augen als Array-Schichten ab. |
| $init.clearOnAccess | boolean | true | Legt fest, ob die Textur bei jedem Zugriff über getSubImage() geleert wird. |
Rückgabewert
XRWebGLBinding.prototype.createEquirectLayer() gibt eine neue XREquirectLayer-Instanz zurück, die man über updateRenderState() an die Sitzung übergibt.