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 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
| Specification |
|---|
| WebGL OVR_multiview2 Extension Specification> |