Spec-Zone.ru › Web APIs

XRWebGLLayer: метод getViewport()

Ограниченная доступность

Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.

  • Узнать больше
  • Показать полную совместимость
  • Отправить отзыв

Экспериментально: Это экспериментальная технология.
Перед использованием в производственной среде внимательно изучите таблицу совместимости браузеров.

Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.

Метод getViewport() интерфейса XRWebGLLayer возвращает XRViewport, который следует использовать для рендеринга указанного XRView в слой WebGL. Для устройств WebXR, использующих один буфер кадра для левого и правого глаза, возвращаемый viewport представляет область буфера кадра, в которую должна быть отрисована сцена для глаза, представленного вью.

Синтаксис

getViewport(view)

Параметры

view

Объект XRView, указывающий представление, для которого должен быть возвращен viewport.

Значение возврата

Объект XRViewport, представляющий viewport, который ограничит отрисовку областью слоя, соответствующей указанному view.

Исключения

InvalidStateError DOMException

Выбрасывается, если указанное 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 Нет

См. также

  • API устройств WebXR

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API