XRСессия
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает во всех широко используемых браузерах.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS) в некоторых или во всех поддерживающих браузерах.
Экспериментальная функция: Это экспериментальная технология
Перед использованием в продуктовой среде внимательно изучите таблицу совместимости браузеров.
Интерфейс XRSession API устройства WebXR представляет собой текущую XR-сессию, предоставляя методы и свойства для взаимодействия с сессией и управления ею. Чтобы открыть XR-сессию WebXR, используйте метод XRSystem интерфейса requestSession().
С помощью методов XRSession вы можете опрашивать положение и ориентацию зрителя (XRViewerPose), собирать информацию об окружающей среде пользователя и отображать изображения пользователю. XRSession поддерживает как встроенные, так и погруженные виртуальные и дополненные реальности.
Свойства экземпляра
Помимо перечисленных ниже свойств, XRSession наследует свойства от своего родительского интерфейса EventTarget.
-
depthDataFormatЭкспериментально Только для чтения -
Возвращает формат данных глубины, с которым была настроена сессия.
-
depthUsageЭкспериментально Только для чтения -
Возвращает использование данных глубины, с которым была настроена сессия.
-
domOverlayStateЭкспериментально Только для чтения -
Предоставляет информацию о наложении DOM, если функция включена.
-
environmentBlendModeЭкспериментально Только для чтения -
Возвращает режим смешивания среды данной сессии, который определяет, сколько реального мира видно через устройство XR и как устройство смешивает изображения устройства с ним.
-
inputSourcesЭкспериментально Только для чтения -
Возвращает список
XRInputSourceданной сессии, каждый из которых представляет собой устройство ввода, используемое для управления камерой и/или сценой. -
interactionModeЭкспериментально Только для чтения -
Возвращает режим взаимодействия данной сессии, который описывает лучшее пространство (согласно агенту пользователя) для приложения для отрисовки интерактивного пользовательского интерфейса для текущей сессии.
-
preferredReflectionFormatЭкспериментально Только для чтения -
Возвращает предпочтительный формат отражения данной сессии, используемый для данных текстур оценки освещения.
-
renderStateЭкспериментально Только для чтения -
Объект
XRRenderState, содержащий параметры, влияющие на способ отображения изображений. Это включает такие вещи, как ближняя и дальняя плоскости обрезки (расстояния, определяющие, насколько близко и как далеко объекты могут находиться и все еще отображаться), а также информацию о поле зрения. -
visibilityStateЭкспериментально Только для чтения -
Строка, указывающая, видно ли изображение сессии пользователю, и если да, то видна ли она, но в данный момент не является целью для событий пользователя.
Методы экземпляра
XRSession предоставляет следующие методы помимо тех, унаследованных от родительского интерфейса EventTarget.
-
cancelAnimationFrame()Экспериментально -
Удаляет обработчик из набора обратных вызовов отрисовки кадра анимации
XRSession, учитывая идентификатор, возвращенный предыдущим вызовомrequestAnimationFrame(). -
end()Экспериментально -
Завершает сессию WebXR. Возвращает
promise, который разрешается при завершении сессии. -
requestAnimationFrame()Экспериментально -
Планирует вызов указанного метода в следующий раз, когда пользовательский агент работает над отрисовкой кадра анимации для устройства WebXR. Возвращает целое значение, которое может быть использовано для идентификации запроса для отмены обратного вызова с помощью
cancelAnimationFrame(). Этот метод аналогичен методуWindow.requestAnimationFrame(). -
requestHitTestSource()Экспериментально -
Запрашивает объект
XRHitTestSource, который обрабатывает подписку на тесты столкновений. -
requestHitTestSourceForTransientInput()Экспериментально -
Запрашивает объект
XRTransientInputHitTestSource, который обрабатывает подписку на тесты столкновений для временного источника ввода. -
requestLightProbe()Экспериментально -
Запрашивает
XRLightProbe, который оценивает информацию об освещении в заданной точке окружающей среды пользователя. -
requestReferenceSpace()Экспериментально -
Запрашивает создание нового
XRReferenceSpaceуказанного типа. Возвращает обещание, которое разрешается сXRReferenceSpaceилиXRBoundedReferenceSpace, которые были запрошены, или выброситNotSupportedErrorDOMException, если запрашиваемый тип пространства не поддерживается устройством. -
updateRenderState()Экспериментально -
Обновляет свойства состояния отрисовки сессии.
События
Следующие события передаются объектам XRSession.
-
endЭкспериментально -
Отправляется объекту
XRSessionпосле завершения сессии WebXR и завершения всех функций, связанных с аппаратным обеспечением. Событие представлено объектом типаXRSessionEvent. Также доступно через свойство обработчика событийonend. -
inputsourceschangeЭкспериментально -
Событие типа
XRInputSourcesChangeEvent, отправляемое объектуXRSessionпри изменении списка активных источников ввода XR. Также доступно через свойство обработчика событийoninputsourceschange. -
selectЭкспериментально -
Событие типа
XRInputSourceEvent, отправляемое сессии, когда один из источников ввода сессии успешно выполнил основное действие. Это обычно соответствует нажатию пользователем триггера, тачпада или кнопки, произнесению команды или выполнению распознаваемого жеста. Событиеselectотправляется после событияselectstartи непосредственно перед событиемselectend. Если событиеselectне отправляется, это означает, что действие выбора было прервано до завершения. Также доступно через свойство обработчика событийonselect. -
selectendЭкспериментально -
Событие типа
XRInputSourceEvent, которое отправляется объекту сессии, когда одно из устройств ввода завершает основное действие или отключается во время обработки основного действия. Например: для действий с кнопкой или триггером это означает, что кнопка отпущена; для голосовых команд это означает, что пользователь закончил говорить. Это последнее из трех событийselect*, которые отправляются. Также доступно через свойство обработчика событийonselectend. -
selectstartЭкспериментально -
Событие типа
XRInputSourceEvent, которое отправляется объекту сессии, когда одно из устройств ввода впервые используется пользователем, чтобы начать основное действие. Это первое из событийsession*. Также доступно через свойство обработчика событийonselectstart. -
squeezeЭкспериментально -
Событие
XRInputSourceEventдля указания того, что основное действие сжатия успешно завершено. Это указывает на то, что устройство, которое сжималось, отпущено, и может представлять, например, отпускание захваченного объекта. Оно отправляется непосредственно перед событиемsqueezeend, чтобы указать на окончание действия сжатия. Также доступно через свойство обработчика событийonsqueeze. -
squeezeendЭкспериментально -
Событие
XRInputSourceEvent, отправляемое объектуXRSessionпри завершении основного действия сжатия, независимо от того, было ли это действие успешным. Также доступно через свойство обработчика событийonsqueezeend. -
squeezestartЭкспериментально -
Событие типа
XRInputSourceEvent, которое отправляется объектуXRSessionпри первоначальном сжатии сжимаемого контроллера пользователем. Это может быть, например, триггер, используемый для представления захвата объектов, или может представлять фактическое сжатие при использовании тактильной перчатки. Также доступно через свойство обработчика событийonsqueezestart. -
visibilitychangeЭкспериментально -
Событие
XRSessionEvent, отправляемое сессии при изменении ее состояния видимости, как указано вvisibilityState. Также доступно через свойство обработчика событийonvisibilitychange.
Пример
В этом примере создается новая XRSession в режиме inline, чтобы ее можно было отображать в элементе HTML, избегая необходимости в специальном устройстве для AR или VR, таком как гарнитура.
const XR = navigator.xr;
if (XR) {
XR.requestSession("inline").then((xrSession) => {
xrSession.requestReferenceSpace("local").then((xrReferenceSpace) => {
xrSession.requestAnimationFrame((time, xrFrame) => {
const viewer = xrFrame.getViewerPose(xrReferenceSpace);
gl.bindFramebuffer(xrWebGLLayer.framebuffer);
for (const xrView of viewer.views) {
const xrViewport = xrWebGLLayer.getViewport(xrView);
gl.viewport(
xrViewport.x,
xrViewport.y,
xrViewport.width,
xrViewport.height,
);
}
});
});
});
} else {
/* WebXR is not available */
}
Спецификации
| Спецификация |
|---|
| API устройств WebXR # xrsession-interface |
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
XRSession |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
|---|---|---|---|---|---|---|---|---|---|---|---|
cancelAnimationFrame |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
depthDataFormat |
90 | 90 | Нет | 76 | Нет | 90 | Нет | 64 | Нет | 15.0 | Нет |
depthUsage |
90 | 90 | Нет | 76 | Нет | 90 | Нет | 64 | Нет | 15.0 | Нет |
domOverlayState |
83 | 83 | Нет | 69 | Нет | 83 | Нет | 59 | Нет | 13.0 | Нет |
enabledFeatures |
111 | 111 | Нет | 97 | Нет | 111 | Нет | 75 | Нет | 22.0 | Нет |
end |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
end_event |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
environmentBlendMode |
81 | 81 | Нет | 68 | Нет | 81 | Нет | 58 | Нет | 11.2 | Нет |
inputSources |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
inputsourceschange_event |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
interactionMode |
84 | 84 | Нет | 70 | Нет | 84 | Нет | 60 | Нет | 14.0 | Нет |
preferredReflectionFormat |
90 | 90 | Нет | 76 | Нет | 90 | Нет | 64 | Нет | 15.0 | Нет |
renderState |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
requestAnimationFrame |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
requestHitTestSource |
81 | 81 | Нет | 68 | Нет | 81 | Нет | 58 | Нет | 12.1 | Нет |
requestHitTestSourceForTransientInput |
81 | 81 | Нет | 68 | Нет | 81 | Нет | 58 | Нет | 13.0 | Нет |
requestLightProbe |
90 | 90 | Нет | 76 | Нет | 90 | Нет | 64 | Нет | 15.0 | Нет |
requestReferenceSpace |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
select_event |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
selectend_event |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
selectstart_event |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
squeeze_event |
83 | 83 | Нет | 69 | Нет | 83 | Нет | 59 | Нет | 13.0 | Нет |
squeezeend_event |
83 | 83 | Нет | 69 | Нет | 83 | Нет | 59 | Нет | 13.0 | Нет |
squeezestart_event |
83 | 83 | Нет | 69 | Нет | 83 | Нет | 59 | Нет | 13.0 | Нет |
updateRenderState |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
visibilityState |
79 | 79 | Нет | 66 | Нет | 79 | Нет | 57 | Нет | 11.2 | Нет |
visibilitychange_event |
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