Spec-Zone.ru › Web APIs

XRSession: метод updateRenderState()

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

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

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

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

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

Метод updateRenderState() интерфейса XRSession API WebXR планирует изменения, которые будут применены к активному состоянию отрисовки (XRRenderState) перед отрисовкой следующего кадра.

Синтаксис

updateRenderState()
updateRenderState(state)

Параметры

state Необязательно

Необязательный объект для настройки XRRenderState. Если не предоставлен, будет использована конфигурация по умолчанию.

  • baseLayer Необязательно: Объект XRWebGLLayer, из которого WebXR-композитор получит изображение. По умолчанию используется null. Для указания других (или нескольких) слоев см. опцию layers.
  • depthFar Необязательно: Значение с плавающей точкой, определяющее расстояние в метрах от зрителя до дальней клип-плоскости, которая является плоскостью, параллельной поверхности отображения, за пределами которой дальнейшая отрисовка не будет выполняться. Вся отрисовка будет выполняться между расстояниями, указанными в depthNear и depthFar. По умолчанию 1000 метров (1 километр).
  • depthNear Необязательно: Значение с плавающей точкой, указывающее расстояние в метрах от зрителя до плоскости, параллельной поверхности отображения, которая будет ближней клип-плоскостью. Никакая часть сцены со стороны зрителя по эту сторону плоскости не будет отрисована. По умолчанию 0,1 метра (10 сантиметров).
  • inlineVerticalFieldOfView Необязательно: Значение с плавающей точкой, указывающее значение поля зрения по умолчанию в радианах, используемое при вычислении проекционной матрицы для inline XRSession. Вычисление проекционной матрицы также учитывает соотношение сторон выходного холста соотношение сторон. Это свойство не должно указываться для интерактивных сессий, поэтому значение по умолчанию для интерактивных сессий null. В противном случае значение по умолчанию равно π * 0,5 (половина от значения пи).
  • layers Необязательно: Упорядоченный массив объектов XRLayer, указывающих слои, которые должны быть представлены устройству XR. Установка layers переопределит baseLayer при его наличии, при этом baseLayer будет сообщать null. Порядок заданных слоев — «сзади-вперед». Для альфа-смешивания слоев см. свойство XRCompositionLayer.blendTextureSourceAlpha.

Возвращаемое значение

None (undefined).

Исключения

InvalidStateError DOMException

Выбрасывается в следующих ситуациях:

  • Сессия XRSession уже завершена, поэтому вы не можете изменить её состояние отрисовки.
  • baseLayer был создан другим XRSession, отличным от того, для которого вызвана updateRenderState().
  • Опция inlineVerticalFieldOfView была установлена, но сессия интерактивная, поэтому эта опция недоступна.
NotSupportedError DOMException

Выбрасывается в следующих ситуациях:

  • Опция layers используется в сессии, созданной без функции layers.
  • Оба параметра baseLayer и layers указаны.
TypeError

Выбрасывается, если опция layers содержит дубликаты.

Примеры

Добавление базового слоя

В этом примере создаётся WebGL-контекст, совместимый с интерактивным устройством XR, а затем используется для создания XRWebGLLayer. Метод updateRenderState() затем вызывается для ассоциирования нового XRWebGLLayer.

function onXRSessionStarted(xrSession) {
  let glCanvas = document.createElement("canvas");
  let gl = glCanvas.getContext("webgl", { xrCompatible: true });

  loadWebGLResources();

  xrSession.updateRenderState({
    baseLayer: new XRWebGLLayer(xrSession, gl),
  });
}

Установка массива слоёв

Для использования слоёв WebXR сессия XR должна быть создана с описателем функции layers (см. XRSystem.requestSession()). Затем вы можете создать различные слои WebXR, такие как

  • XREquirectLayer
  • XRCubeLayer
  • XRCylinderLayer
  • XRQuadLayer

Также доступны другие слои, такие как XRProjectionLayer или XRWebGLLayer.

Слои будут представлены в том порядке, в котором они указаны в массиве layers, с слоями, представленными в порядке «сзади-вперед».

const xrSession = navigator.xr.requestSession("immersive-ar", {
  optionalFeatures: ["layers"],
});

function onXRSessionStarted(xrSession) {
  const glCanvas = document.createElement("canvas");
  const gl = glCanvas.getContext("webgl", { xrCompatible: true });
  const xrGlBinding = new XRWebGLBinding(xrSession, gl);
  const projectionLayer = new XRWebGLLayer(xrSession, gl);
  const quadLayer = xrGlBinding.createQuadLayer({
    pixelWidth: 1024,
    pixelHeight: 1024,
  });

  xrSession.updateRenderState({
    layers: [projectionLayer, quadLayer],
  });
}

Спецификации

Спецификация
API устройств WebXR
# dom-xrsession-updaterenderstate

Совместимость с браузерами

Рабочий стол Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
updateRenderState 79 79 Нет 66 Нет 79 Нет 57 Нет 11.2 Нет

См. также

  • API устройств WebXR
  • XRRenderState
  • XRSession.renderState

© 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/XRSession/updateRenderState

Spec-Zone.ru

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