OVR_multiview2-Erweiterung
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
Die OVR_multiview2-Erweiterung ist Teil der WebGL-API und fügt Unterstützung für das gleichzeitige Rendern in mehrere Ansichten hinzu. Dies ist besonders nützlich für Virtual Reality (VR) und WebXR.
Weitere Informationen finden Sie unter:
- Multiview auf WebXR
- Multiview in babylon.js
- Optimierung der Virtual Reality: Verstehen von Multiview
- Multiview WebGL-Rendering für Meta Quest
WebGL-Erweiterungen sind über die Methode WebGLRenderingContext.getExtension() verfügbar. Weitere Informationen finden Sie unter Verwendung von Erweiterungen im WebGL-Leitfaden.
Hinweis: Die Unterstützung hängt vom Grafiktreiber des Systems ab (Windows+ANGLE und Android werden unterstützt; Windows+GL, Mac, Linux werden nicht unterstützt).
Diese Erweiterung ist nur für WebGL 2-Kontexte verfügbar, da sie GLSL 3.00 und Texturarrays benötigt.
Derzeit gibt es keine Möglichkeit, Multiview zum Rendern auf einen multisample backbuffer zu verwenden. Daher sollten Sie Kontexte mit antialias: false erstellen. Der Oculus-Browser (ab Version 6) unterstützt jedoch auch Multisampling mithilfe der OCULUS_multiview-Erweiterung. Siehe auch dieses WebGL-Problem.
Konstanten
Diese Erweiterung bietet 4 Konstanten, die in getParameter() oder getFramebufferAttachmentParameter() verwendet werden können.
FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR-
Anzahl der Ansichten des Framebuffer-Objekt-Anhangs.
FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR-
Basis-Ansichtsindex des Framebuffer-Objekt-Anhangs.
MAX_VIEWS_OVR-
Die maximale Anzahl von Ansichten. Die meisten VR-Headsets haben zwei Ansichten, aber es gibt Prototypen von Headsets mit ultra-weitem Sichtfeld, die 4 Ansichten verwenden, was derzeit die maximale von Multiview unterstützte Anzahl an Ansichten ist.
FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR-
Wenn baseViewIndex nicht für alle Framebuffer-Anhangspunkte identisch ist, bei denen der Wert von
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPEnichtNONEist, wird der Framebuffer als unvollständig betrachtet. Der Aufruf voncheckFramebufferStatusfür einen Framebuffer in diesem Zustand gibtFRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVRzurück.
Instanzmethoden
framebufferTextureMultiviewOVR()-
Rendert gleichzeitig auf mehrere Elemente eines 2D-Texturarrays.
Beispiele
Dieses Beispiel stammt aus der Spezifikation.
const gl = document
.createElement("canvas")
.getContext("webgl2", { antialias: false });
const ext = gl.getExtension("OVR_multiview2");
const fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.DRAW_FRAMEBUFFER, fb);
const colorTex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D_ARRAY, colorTex);
gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.RGBA8, 512, 512, 2);
ext.framebufferTextureMultiviewOVR(
gl.DRAW_FRAMEBUFFER,
gl.COLOR_ATTACHMENT0,
colorTex,
0,
0,
2,
);
const depthStencilTex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D_ARRAY, depthStencilTex);
gl.texStorage3D(gl.TEXTURE_2D_ARRAY, 1, gl.DEPTH32F_STENCIL8, 512, 512, 2);
ext.framebufferTextureMultiviewOVR(
gl.DRAW_FRAMEBUFFER,
gl.DEPTH_STENCIL_ATTACHMENT,
depthStencilTex,
0,
0,
2,
);
gl.drawElements(/* … */); // draw will be broadcasted to the layers of colorTex and depthStencilTex.
Shader-Code
#version 300 es
#extension GL_OVR_multiview2 : require
precision mediump float;
layout (num_views = 2) in;
in vec4 inPos;
uniform mat4 u_viewMatrices[2];
void main() {
gl_Position = u_viewMatrices[gl_ViewID_OVR] * inPos;
}
Sehen Sie auch dieses three.js-Demo für ein Live-Multiview-Beispiel.
Spezifikationen
| Spezifikation |
|---|
| WebGL OVR_multiview2 Extension Specification> |