Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die Erweiterung OVR_multiview2 ist Teil der WebGL-API und ermöglicht das gleichzeitige Rendern in mehrere Ansichten. Das ist besonders für Virtual Reality (VR) und WebXR nützlich.

Weitere Informationen finden Sie unter:

WebGL-Erweiterungen sind über die Methode WebGLRenderingContext.getExtension() verfügbar. Weitere Informationen finden Sie unter WebGL-Erweiterungen verwenden.

Hinweis: Die Unterstützung hängt vom Grafiktreiber des Systems ab (Windows+ANGLE und Android werden unterstützt; Windows+GL, Mac und Linux werden nicht unterstützt).

Diese Erweiterung ist nur für WebGL-2-Kontexte verfügbar, da sie GLSL 3.00 und Texture Arrays benötigt.

Derzeit gibt es keine Möglichkeit, mit Multiview in einen multisampled Backbuffer zu rendern. Erstellen Sie Kontexte daher mit antialias: false. Der Oculus Browser (ab Version 6) unterstützt allerdings auch Multisampling über die Erweiterung OCULUS_multiview. Siehe auch dieses WebGL-Issue.

Konstanten

Diese Erweiterung stellt vier 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

Basisansichtsindex des Framebuffer-Objekt-Anhangs.

MAX_VIEWS_OVR

Die maximale Anzahl von Ansichten. Die meisten VR-Headsets haben zwei Ansichten. Es gibt jedoch Prototypen von Headsets mit einem ultrabreiten Sichtfeld, die vier Ansichten verwenden. Das ist derzeit die maximale Anzahl von Ansichten, die Multiview unterstützt.

FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR

Wenn baseViewIndex nicht für alle Framebuffer-Anhangspunkte gleich ist, bei denen der Wert von FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE nicht NONE ist, gilt der Framebuffer als unvollständig. Ein Aufruf von checkFramebufferStatus für einen Framebuffer in diesem Zustand gibt FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR zurück.

Instanzmethoden

framebufferTextureMultiviewOVR()

Rendert gleichzeitig in mehrere Elemente eines 2D-Texture-Arrays.

Beispiele

Dieses Beispiel stammt aus der Spezifikation.

js
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

glsl
#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;
}

Ein interaktives Multiview-Beispiel finden Sie außerdem in dieser three.js-Demo.

Spezifikationen

Spezifikation
WebGL OVR_multiview2 Extension Specification

Browser-Kompatibilität

Siehe auch