OVR_multiview2-Erweiterung
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die OVR_multiview2
-Erweiterung ist Teil der WebGL-API und fügt Unterstützung für das gleichzeitige Rendering in mehrere Ansichten hinzu. Dies ist besonders nützlich für Virtual Reality (VR) und WebXR.
Für weitere Informationen siehe auch:
- Multiview auf WebXR
- Multiview in babylon.js
- Optimierung von Virtual Reality: Verständnis von Multiview
- Multiview WebGL-Rendering für Meta Quest
WebGL-Erweiterungen sind über die Methode WebGLRenderingContext.getExtension()
verfügbar. Weitere Informationen finden Sie auch 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 in WebGL 2-Kontexten verfügbar, da sie GLSL 3.00 und Textur-Arrays benötigt.
Derzeit gibt es keine Möglichkeit, Multiview zu verwenden, um in einen multisampelnden Backbuffer zu rendern, daher sollten Sie Kontexte mit antialias: false
erstellen. Der Oculus-Browser (6+) unterstützt jedoch auch Multisampling mit der OCULUS_multiview
-Erweiterung. Siehe auch dieses WebGL-Problem.
Konstanten
Diese Erweiterung stellt 4 Konstanten bereit, 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 der Ansichten. Die meisten VR-Headsets haben zwei Ansichten, aber es gibt Prototypen von Headsets mit ultraweitem Sichtfeld, bei denen 4 Ansichten verwendet werden, was derzeit die maximal unterstützte Anzahl von Ansichten durch Multiview ist.
FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR
-
Wenn baseViewIndex nicht für alle Framebuffer-Objekt-Anhänge, bei denen der Wert von
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE
nichtNONE
ist, gleich ist, wird der Framebuffer als unvollständig angesehen. Ein Aufruf voncheckFramebufferStatus
für einen Framebuffer in diesem Zustand gibtFRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR
zurück.
Instanzmethoden
framebufferTextureMultiviewOVR()
-
Rendert gleichzeitig auf mehrere Elemente eines 2D-Textur-Arrays.
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 sich auch dieses three.js-Demo für ein Live-Multiview-Beispiel an.
Spezifikationen
Specification |
---|
WebGL OVR_multiview2 Extension Specification |
Browser-Kompatibilität
BCD tables only load in the browser