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

XRWebGLBinding.createEquirectLayer()

Methode

Erzeugt ein <code>XREquirectLayer</code>, das equirektangular kodierte Bilddaten (z. B. 360°-Panoramen) auf die Innenseite einer Kugel abbildet.

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

Signatur

XRWebGLBinding.prototype.createEquirectLayer(options)

Beschreibung

Mit createEquirectLayer() legst du über ein XRWebGLBinding eine Kompositionsebene (Layer) an, deren Textur equirektangular projiziert ist. Der XR-Compositor legt die Textur direkt auf die Innenseite einer (Teil-)Kugel um den Betrachter. So zeigst du 360°- oder 180°-Panoramen, Skyboxen oder Stereo-Bilder an, ohne die Kugel selbst in WebGL rendern zu müssen.

Der Vorteil gegenüber einer selbst gerenderten Kugel: Der Compositor tastet die Textur direkt mit der Auflösung des Displays ab. Dadurch entfällt ein zusätzlicher Resampling-Schritt, das Bild wird schärfer, und die Anwendung muss die Ebene nicht in jedem Frame neu zeichnen. Das gilt vor allem mit isStatic: true.

Voraussetzung ist eine Sitzung, die mit dem Feature "layers" angefordert wurde. Den erzeugten Layer trägst du über XRSession.updateRenderState({ layers: [...] }) ein. Die Reihenfolge im Array bestimmt, welche Ebene über welcher liegt. Sobald layer.needsRedraw gesetzt ist, holst du dir mit XRWebGLBinding.getSubImage() die Farbtextur und zeichnest hinein.

Größe und abgedeckten Ausschnitt der Kugel steuerst du mit radius, centralHorizontalAngle, upperVerticalAngle und lowerVerticalAngle. Diese Werte lassen sich auch nachträglich direkt am Layer ändern. Die Ausrichtung legst du über space und transform fest.

Parameter

Name Typ Default Beschreibung
$options Pflicht XREquirectLayerInit Konfigurationsobjekt mit den folgenden Eigenschaften.
$options.space Pflicht XRSpace Raum, in dem der Kugelmittelpunkt verankert ist, meist ein Referenzraum wie "local".
$options.viewPixelWidth Pflicht number Breite der Textur pro Ansicht in Pixeln.
$options.viewPixelHeight Pflicht number Höhe der Textur pro Ansicht in Pixeln.
$options.layout "mono" | "stereo" | "stereo-left-right" | "stereo-top-bottom" "mono" Anordnung der Ansichten in der Textur. "default" ist hier nicht erlaubt.
$options.transform XRRigidTransform Identität Position und Ausrichtung der Kugel relativ zu space.
$options.radius number 0 Radius der Kugel in Metern. 0 steht für eine unendlich große Kugel (Skybox-Verhalten).
$options.centralHorizontalAngle number 2 * Math.PI Horizontal abgedeckter Winkel in Radiant, z. B. Math.PI für 180°.
$options.upperVerticalAngle number Math.PI / 2 Oberer Grenzwinkel in Radiant.
$options.lowerVerticalAngle number -Math.PI / 2 Unterer Grenzwinkel in Radiant.
$options.colorFormat GLenum gl.RGBA Internes Format der Farbtextur.
$options.depthFormat GLenum 0 Format einer optionalen Tiefentextur. 0 bedeutet: keine Tiefentextur.
$options.textureType "texture" | "texture-array" "texture" Legt fest, ob eine 2D-Textur oder ein Textur-Array (nur WebGL 2) angelegt wird.
$options.mipLevels number 1 Anzahl der Mipmap-Stufen.
$options.isStatic boolean false Bei true zeichnest du nur einmal (bzw. nur, wenn needsRedraw gesetzt ist). Der Compositor darf den Speicher dann optimieren.
$options.clearOnAccess boolean true Legt fest, ob die Textur bei jedem Zugriff über getSubImage() geleert wird.

Rückgabewert

Typ
XREquirectLayer
Beschreibung
Der neu erzeugte Layer. Er wird erst sichtbar, wenn du ihn über updateRenderState({ layers }) einträgst.