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Необязательно: Значение с плавающей точкой, указывающее значение поля зрения по умолчанию в радианах, используемое при вычислении проекционной матрицы дляinlineXRSession. Вычисление проекционной матрицы также учитывает соотношение сторон выходного холста соотношение сторон. Это свойство не должно указываться для интерактивных сессий, поэтому значение по умолчанию для интерактивных сессийnull. В противном случае значение по умолчанию равно π * 0,5 (половина от значения пи). -
layersНеобязательно: Упорядоченный массив объектовXRLayer, указывающих слои, которые должны быть представлены устройству XR. УстановкаlayersпереопределитbaseLayerпри его наличии, при этомbaseLayerбудет сообщатьnull. Порядок заданных слоев — «сзади-вперед». Для альфа-смешивания слоев см. свойствоXRCompositionLayer.blendTextureSourceAlpha.
-
Возвращаемое значение
None (undefined).
Исключения
-
InvalidStateErrorDOMException -
Выбрасывается в следующих ситуациях:
- Сессия
XRSessionуже завершена, поэтому вы не можете изменить её состояние отрисовки. baseLayerбыл создан другимXRSession, отличным от того, для которого вызванаupdateRenderState().- Опция
inlineVerticalFieldOfViewбыла установлена, но сессия интерактивная, поэтому эта опция недоступна.
- Сессия
-
NotSupportedErrorDOMException -
Выбрасывается в следующих ситуациях:
- Опция
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, такие как
Также доступны другие слои, такие как 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],
});
}
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 | Нет |
См. также
© 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