XRWebGLLayer: метод getViewport()
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.
Экспериментально: Это экспериментальная технология.
Перед использованием в производственной среде внимательно изучите таблицу совместимости браузеров.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Метод getViewport() интерфейса XRWebGLLayer возвращает XRViewport, который следует использовать для рендеринга указанного XRView в слой WebGL. Для устройств WebXR, использующих один буфер кадра для левого и правого глаза, возвращаемый viewport представляет область буфера кадра, в которую должна быть отрисована сцена для глаза, представленного вью.
Синтаксис
getViewport(view)
Параметры
Значение возврата
Объект XRViewport, представляющий viewport, который ограничит отрисовку областью слоя, соответствующей указанному view.
Исключения
-
InvalidStateErrorDOMException -
Выбрасывается, если указанное
viewне находится в активномXRFrameили еслиXRFrameиXRWebGLLayerне являются частью одной и той же сессии WebXR.
Примеры
В этом примере показано, как может выглядеть обработчик функции requestAnimationFrame(), использующий getViewport() для получения viewport, чтобы ограничить отрисовку областью, отведенной для глаза, чья точка зрения в настоящее время рендерится.
Это работает, потому что набор представлений, возвращаемый XRViewerPose, каждый представляет перспективу одного глаза на сцене. Поскольку буфер кадра разделен пополам, по одной половине для каждого глаза, установка viewport WebGL в соответствии с viewport слоя WebXR гарантирует, что при рендеринге сцены для текущей позы глаза она будет отрисована в правильной половине буфера кадра.
function drawFrame(time, frame) {
const session = frame.session;
const pose = frame.getViewerPose(mainReferenceSpace);
if (pose) {
const glLayer = session.renderState.baseLayer;
gl.bindFramebuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
gl.clearColor(0, 0, 0, 1.0);
gl.clearDepth(1.0);
gl.clear(gl.COLOR_BUFFER_BIT, gl.DEPTH_COLOR_BIT);
for (const view of pose.views) {
const viewport = glLayer.getViewport(view);
gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);
/* Render the scene now */
}
}
}
Спецификации
| Спецификация |
|---|
| API устройств WebXR # dom-xrwebgllayer-getviewport |
Совместимость браузеров
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
getViewport |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
См. также
© 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/XRWebGLLayer/getViewport