Расширение OVR_multiview2
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает во многих широко используемых браузерах.
Расширение OVR_multiview2 является частью WebGL API и добавляет поддержку одновременного рендеринга в несколько представлений. Это особенно полезно для виртуальной реальности (VR) и WebXR.
Для получения дополнительной информации также см.:
- Multiview на WebXR
- Multiview в babylon.js
- Оптимизация виртуальной реальности: понимание Multiview
- Multiview WebGL рендеринг для Meta Quest
Расширения WebGL доступны с помощью метода WebGLRenderingContext.getExtension(). Дополнительную информацию также можно найти в Использование расширений в WebGL tutorial.
Примечание: Поддержка зависит от графического драйвера системы (поддерживаются Windows+ANGLE и Android; Windows+GL, Mac, Linux не поддерживаются).
Это расширение доступно только для контекстов WebGL 2, так как оно требует GLSL 3.00 и массивов текстур.
В настоящее время нет способа использовать multiview для рендеринга в многообразный буфер заднего плана, поэтому вы должны создавать контексты с antialias: false. Однако браузер Oculus (6+) также поддерживает многообразное сглаживание с использованием расширения OCULUS_multiview. Также см. эту проблему WebGL.
Постоянные значения
Это расширение предоставляет 4 постоянных значения, которые могут быть использованы в getParameter() или getFramebufferAttachmentParameter().
FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR-
Количество представлений прикрепленного объекта буфера кадра.
FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR-
Индекс базового представления прикрепленного объекта буфера кадра.
MAX_VIEWS_OVR-
Максимальное количество представлений. Большинство VR-шлемов имеют два представления, но существуют прототипы шлемов с сверхшироким полем обзора, использующие 4 представления, что в настоящее время является максимальным количеством представлений, поддерживаемых multiview.
FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR-
Если baseViewIndex не одинаков для всех точек прикрепления буфера кадра, где значение
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPEне равноNONE, буфер кадра считается неполным. ВызовcheckFramebufferStatusдля буфера кадра в этом состоянии возвращаетFRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR.
Методы экземпляра
framebufferTextureMultiviewOVR()-
Одновременный рендеринг на несколько элементов массива 2D-текстур.
Примеры
Этот пример взят из спецификации.
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.
Код шейдера
#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;
}
Также см. эту демонстрацию three.js для примера многоэкранного рендеринга.
Спецификации
| Спецификация |
|---|
| Спецификация расширения WebGL OVR_multiview2 |
Совместимость с браузерами
| Десктопные | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
OVR_multiview2 |
93Поддерживается только на Windows с ANGLE. |
93Поддерживается только на Windows с ANGLE. |
71Поддерживается только на Windows с ANGLE. |
79Поддерживается только на Windows с ANGLE. |
Нет | 93 | 79Поддерживается только на Windows с ANGLE. |
Нет | Нет | 17.0 | 93 |
framebufferTextureMultiviewOVR |
93 | 93 | 71 | 79 | Нет | 93 | 79 | Нет | Нет | 17.0 | 93 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/OVR_multiview2