XRSystem: метод requestSession()
Ограниченная доступность
Эта функция не относится к базовому уровню, так как она не работает в некоторых из наиболее широко используемых браузеров.
Экспериментально: Это экспериментальная технология
Перед использованием в продуктовой среде внимательно проверьте таблицу совместимости браузеров.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или всех поддерживающих браузерах.
Метод requestSession() интерфейса XRSystem возвращает promise, который разрешается в объект XRSession, с помощью которого можно управлять запрошенным типом сессии WebXR.
Хотя одновременно может быть активна только одна сессия VR, несколько встроенных сессий могут быть в работе одновременно.
Синтаксис
requestSession(mode) requestSession(mode, options)
Параметры
mode-
Строка
String, определяющая режим сессии XR. Поддерживаемые режимы:-
Экспериментально
immersive-ar: Вывод сессии получит эксклюзивный доступ к устройству виртуальной реальности, но отображаемое содержимое будет смешиваться с реальной средой.environmentBlendModeсессии указывает метод, используемый для смешивания содержимого. -
immersive-vr: Означает, что отображаемая сессия будет отображаться с помощью устройства XR в режиме VR; она не предназначена для наложения или интеграции в окружающую среду.environmentBlendModeожидается бытьopaque, но может бытьadditive, если этого требует оборудование. -
inline: Вывод представлен встроенно в контексте элемента в стандартном документе HTML, а не занимает все визуальное пространство. Встроенные сессии могут отображаться в моно- или стереорежиме и могут или не могут иметь отслеживание зрителя. Встроенные сессии не требуют специального оборудования и должны быть доступны на любом агенте пользователя, поддерживающем API WebXR.
-
Экспериментально
optionsНеобязательно-
Объект для настройки
XRSession. Если ни один не указан, устройство будет использовать конфигурацию по умолчанию для всех параметров.-
requiredFeaturesНеобязательно: Массив значений, которые обязательно должны поддерживаться возвращаемойXRSession. См. Особенности сессии ниже. -
optionalFeaturesНеобязательно: Массив значений, определяющих функции, которые возвращаемаяXRSessionможет необязательно поддерживать. См. Особенности сессии ниже. -
domOverlayНеобязательно: Объект с обязательным свойствомroot, которое указывает элемент перекрытия, который будет отображаться пользователю как содержимое перекрытия DOM. См. пример ниже . -
depthSensingНеобязательно: Объект с двумя обязательными свойствамиusagePreferenceиdataFormatPreferenceдля настройки выполнения измерения глубины. См. пример ниже .
-
Возвращаемое значение
Объект Promise, который разрешается объектом XRSession, если устройство и пользовательский агент поддерживают запрошенный режим и функции.
Исключения
Этот метод не генерирует истинные исключения; вместо этого он отклоняет возвращенное обещание, передавая в него DOMException, чье name является одним из следующих:
-
InvalidStateErrorDOMException -
Возвращается, если запрошенный режим сессии
immersive-vr, но уже активна или настраивается сессия виртуальной реальности. Одновременно может быть только одна сессия VR. -
NotSupportedErrorDOMException -
Возвращается, если нет доступного устройства, совместимого с WebXR, или устройство не поддерживает указанную
sessionMode; это также может быть выброшено, если любая из обязательных опций не поддерживается. -
SecurityErrorDOMException -
Возвращается, если разрешение на вход в указанный режим XR отклонено. Это может произойти по нескольким причинам, которые более подробно описаны в Разрешения и безопасность.
Особенности сессии
Следующие функции и пространства ссылок сессии могут быть запрошены, либо как optionalFeatures или как requiredFeatures.
anchors-
Включает использование объектов
XRAnchor. bounded-floor-
Аналогично типу
local, за исключением того, что пользователю не разрешается перемещаться за пределы предопределенной границы, заданнойboundsGeometryв возвращаемом объекте. depth-sensing-
Включает возможность получения информации о глубине с помощью объектов
XRDepthInformation. dom-overlay-
Включает возможность указания элемента перекрытия DOM, который будет отображен пользователю.
hand-tracking-
Включает информацию об артикулированных позах рук от контроллеров ввода на основе рук (см.
XRHandиXRInputSource.hand). hit-test-
Включает функции тестирования попадания для выполнения тестирования попадания в реальную геометрию.
layers-
Включает возможность создания различных типов слоев (кроме
XRProjectionLayer). light-estimation-
Включает возможность оценки условий освещения окружающей среды с помощью объектов
XRLightEstimate. local-
Включает пространство отслеживания, родной корень которого расположен рядом с позицией зрителя во время создания сессии. Точное положение зависит от базовой платформы и реализации. Пользователю не рекомендуется перемещаться далеко от начальной позиции, и отслеживание оптимизировано для этого случая.
local-floor-
Аналогично типу
local, за исключением того, что начальная позиция размещена в безопасном месте для стояния зрителя, где значение оси y равно 0 на уровне пола. Если этот уровень пола неизвестен, пользовательский агент оценит его. Если оцененный уровень пола не равен нулю, браузер, по ожиданию, округляет его таким образом, чтобы избежать отпечатков пальцев (вероятно, до ближайшего сантиметра). secondary-views-
Включает возможность использования объектов
XRViewв качестве дополнительных представлений. Это может использоваться для представлений наблюдателя первого лица, используемых для записи видео, или "четырёх представлений", где на каждый глаз приходится два представления с разной разрешающей способностью и полями зрения. unbounded-
Включает пространство отслеживания, которое позволяет пользователю свободно перемещаться, возможно, на очень большие расстояния от исходной точки. Зритель не отслеживается вообще; отслеживание оптимизировано для стабильности вокруг текущего положения пользователя, поэтому родной корень может смещаться по мере необходимости для удовлетворения этой потребности.
viewer-
Включает пространство отслеживания, родной корень которого отслеживает положение и ориентацию зрителя.
Безопасность
Несколько функций сеанса и различные пространства ссылок имеют минимальные требования к безопасности и конфиденциальности, такие как запрос согласия пользователя и/или требование Permissions-Policy: xr-spatial-tracking директива должна быть установлена. См. также Разрешения и безопасность для получения более подробной информации.
| Функция сеанса | Требование согласия пользователя | Требование к политике разрешений |
|---|---|---|
bounded-floor | Требуется всегда | xr-spatial-tracking |
depth-sensing | — | xr-spatial-tracking |
hand-tracking | Требуется всегда | — |
hit-test | — | xr-spatial-tracking |
local | Требуется всегда для встроенных сеансов | xr-spatial-tracking |
local-floor | Требуется всегда | xr-spatial-tracking |
unbounded | Требуется всегда | xr-spatial-tracking |
viewer | Требуется всегда | — |
См. также временную активацию пользователя.
Примеры
Создание интерактивного VR-сеанса
Следующий пример вызывает requestSession(), запрашивая сеанс "immersive-vr". Если Promise разрешается, он настраивает сеанс и инициирует цикл анимации.
navigator.xr
.requestSession("immersive-vr")
.then((xrSession) => {
xrSession.addEventListener("end", onXRSessionEnded);
// Do necessary session setup here.
// Begin the session's animation loop.
xrSession.requestAnimationFrame(onXRAnimationFrame);
})
.catch((error) => {
// "immersive-vr" sessions are not supported
console.error(
"'immersive-vr' isn't supported, or an error occurred activating VR!",
);
});
Проверка поддержки WebXR и использование кнопки для запуска VR-режима
Следующий пример демонстрирует, как использовать как isSessionSupported() , так и requestSession(). Сначала проверяется доступность WebXR, проверяя существование navigator.xr. Затем вызывается isSessionSupported(), передавая ему желаемые параметры сеанса перед включением управления для входа в XR. Добавление управления является необходимым шагом, поскольку вход в XR требует действия пользователя. Наконец, метод onButtonClicked() вызывает requestSession(), используя те же параметры сеанса, что и isSessionSupported().
if (navigator.xr) {
navigator.xr.isSessionSupported("immersive-vr").then((isSupported) => {
if (isSupported) {
immersiveButton.addEventListener("click", onButtonClicked);
immersiveButton.textContent = "Enter XR";
immersiveButton.disabled = false;
} else {
console.error("WebXR doesn't support immersive-vr mode!");
}
});
} else {
console.error("WebXR is not available!");
}
function onButtonClicked() {
if (!xrSession) {
navigator.xr.requestSession("immersive-vr").then((session) => {
xrSession = session;
// onSessionStarted() not shown for reasons of brevity and clarity.
onSessionStarted(xrSession);
});
} else {
// Button is a toggle button.
xrSession.end().then(() => (xrSession = null));
}
}
Запрос сеанса с необходимыми функциями
Требуется неограниченный опыт, в котором пользователь может свободно перемещаться по своей физической среде:
navigator.xr.requestSession("immersive-vr", {
requiredFeatures: ["unbounded"],
});
Запрос сеанса с наложением DOM
navigator.xr.requestSession("immersive-ar", {
optionalFeatures: ["dom-overlay"],
domOverlay: {
root: document.getElementById("xr-overlay"),
},
});
Запрос сеанса с функцией определения глубины
Здесь вызывающий метод может обрабатывать как использование, оптимизированное для ЦП, так и для графического процессора, а также форматы «luminance-alpha» и «float32». Порядок указывает предпочтение ЦП и «luminance-alpha»:
navigator.xr.requestSession("immersive-ar", {
requiredFeatures: ["depth-sensing"],
depthSensing: {
usagePreference: ["cpu-optimized", "gpu-optimized"],
dataFormatPreference: ["luminance-alpha", "float32"],
},
});
Спецификации
| Спецификация |
|---|
| WebXR Device API # dom-xrsystem-requestsession |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
requestSession |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 12.0 | Нет |
© 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/XRSystem/requestSession