Start · Sprachen · JavaScript · Referenz · XRWebGLBinding.createCylinderLayer()

XRWebGLBinding.createCylinderLayer()

Methode

Erzeugt ein <code>XRCylinderLayer</code>, also eine WebGL-gerenderte Ebene auf der Innenseite eines Zylinderausschnitts im XR-Raum, z. B. für gekrümmte Menüs oder Videoflächen.

seit JavaScript WebXR Layers API (experimentell): Meta Quest Brows Kategorie: webapi

Signatur

XRWebGLBinding.prototype.createCylinderLayer(init)

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

Typ
XRCylinderLayer
Beschreibung
Die neue Zylinder-Ebene. Ihre Eigenschaften radius, centralAngle, aspectRatio, transform und space lassen sich zur Laufzeit ändern.