Signatur
Beschreibung
Mit createCylinderLayer() legst du über ein XRWebGLBinding eine Zylinder-Ebene an. Der XR-Compositor zeigt ihren Inhalt auf der Innenfläche eines Zylinderausschnitts, der den Betrachter umgibt. Das eignet sich besonders für gekrümmte Bedienoberflächen, Textpanels oder breite Videoflächen. Aus Sicht des Nutzers sind sie dann überall etwa gleich weit entfernt.
Anders als bei einer Projektions-Ebene (createProjectionLayer()) wird der Inhalt nicht pro Auge perspektivisch gerendert. Die Anwendung zeichnet nur eine flache 2D-Textur, und der Compositor verzerrt sie passend zur Kopfbewegung. Weil die Textur nur einmal abgetastet wird, wird Text schärfer und es gibt weniger Reprojektionsfehler. Die Form des Zylinders legen radius, centralAngle (Öffnungswinkel im Bogenmaß) und aspectRatio fest. Die Lage im Raum ergibt sich aus space und transform.
Die neue Ebene wird erst sichtbar, wenn du sie mit XRSession.updateRenderState({ layers: [...] }) in die Ebenenliste aufnimmst. Gezeichnet wird in jedem Frame: XRWebGLBinding.getSubImage(layer, frame) liefert eine XRWebGLSubImage mit Farbtextur (colorTexture) und viewport. Die Textur hängst du an einen eigenen Framebuffer.
Die Methode gibt es nur, wenn die Sitzung mit dem Feature "layers" angefordert wurde. Außerdem muss der WebGL-Kontext XR-kompatibel sein (xrCompatible: true oder makeXRCompatible()).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $init Pflicht | XRCylinderLayerInit | Konfigurationsobjekt der Ebene. Die Einträge sind unten einzeln aufgeführt. | |
| $init.space Pflicht | XRSpace | Referenzraum, in dem die Ebene verankert ist, z. B. aus requestReferenceSpace('local'). |
|
| $init.viewPixelWidth Pflicht | number | Breite der Farbtextur in Pixeln. | |
| $init.viewPixelHeight Pflicht | number | Höhe der Farbtextur in Pixeln. | |
| $init.transform | XRRigidTransform | null | Identität | Position und Ausrichtung des Zylindermittelpunkts relativ zu space. |
| $init.radius | number | 2.0 | Radius des Zylinders in Metern, also der Abstand der Fläche vom Mittelpunkt. |
| $init.centralAngle | number | 0.78539 (π/4) | Horizontaler Öffnungswinkel des Zylinderausschnitts im Bogenmaß. |
| $init.aspectRatio | number | 2.0 | Verhältnis von Bogenlänge zu Höhe. Die sichtbare Höhe ergibt sich aus radius * centralAngle / aspectRatio. |
| $init.layout | "mono" | "stereo" | "stereo-left-right" | "stereo-top-bottom" | "mono" | Legt fest, ob beide Augen dieselbe Textur sehen oder ob es getrennte Stereo-Bilder gibt. "default" ist hier nicht erlaubt. |
| $init.textureType | "texture" | "texture-array" | "texture" | Art der Textur. "texture-array" geht nur mit WebGL 2. |
| $init.colorFormat | GLenum | gl.RGBA (0x1908) | Internes Format der Farbtextur. |
| $init.depthFormat | GLenum | null | null | Optionales Format einer Tiefentextur. |
| $init.mipLevels | number | 1 | Anzahl der Mipmap-Stufen. |
| $init.isStatic | boolean | false | Bei true wird der Inhalt nur einmal gezeichnet bzw. nur dann, wenn layer.needsRedraw gesetzt ist. Das spart Speicher und Rechenzeit. |
Rückgabewert
radius, centralAngle, aspectRatio, transform und space lassen sich zur Laufzeit ändern.