Жизненный цикл веб-приложений XR
В этом руководстве мы рассмотрим общий обзор процесса создания и управления веб-приложением WebXR, не углубляясь в детали кода. Это служит подготовкой к последующим статьям данного руководства WebXR, которые охватывают запуск и завершение сессии WebXR, геометрию, моделирование камер, пространственное отслеживание и многое другое.
Обзор жизненного цикла
Большинство приложений, использующих WebXR, следуют похожей общей структуре:
-
Проверьте, поддерживает ли устройство пользователя и его браузер предоставление желаемого XR-опыта.
- Убедитесь, что API WebXR доступен; если
navigator.xrне определен, можно предположить, что браузер и/или устройство пользователя не поддерживают WebXR. Если поддержка отсутствует, отключите все элементы пользовательского интерфейса, используемые для активации XR-функций, и прервите любые попытки перехода в XR-режим. - Вызовите
navigator.xr.isSessionSupported(), указав желаемый режим WebXR-опыта:inline,immersive-vr, илиimmersive-ar, чтобы определить, доступна ли необходимая сессия. - Если необходимый тип сессии доступен, предоставьте пользователю соответствующий интерфейс для активации.
- Убедитесь, что API WebXR доступен; если
-
Когда пользователь запрашивает активацию функции WebXR, взаимодействуя с активированным выше пользовательским интерфейсом, запросите
XRSessionс желаемым режимом. Это выполняется путём вызоваnavigator.xr.requestSession(), снова указав строку, обозначающую необходимый режим:inline,immersive-vr, илиimmersive-ar. -
Если обещание, возвращённое
requestSession(), выполняется успешно, используйте новуюXRSessionдля управления сессией WebXR в течение всего времени работы с WebXR. Это будет включать управление вводами, анимацией и рендерингом.- Вызовите метод
XRSessionrequestAnimationFrame()для планирования первого рендера кадра для XR-устройства. - Если сцена сложная, рекомендуется создать
Worker(или использовать уже созданный для этой цели) для выполнения вычислений, необходимых для рендера каждого кадра. Это снизит вероятность заметной задержки процесса рендеринга приложения. - Каждый
requestAnimationFrame()обратный вызов должен использовать предоставленную информацию о расположении объектов в 3D-мире для рендеринга кадра с помощью WebGL. - Каждый раз при вызове обратного вызова необходимо снова вызвать
requestAnimationFrame(), чтобы сообщить браузеру о необходимости повторного выполнения обратного вызова при наступлении времени рендеринга следующего кадра.
- Вызовите метод
-
Когда это необходимо (например, при выходе пользователя из приложения или переходе на другой сайт), завершите XR-сессию; в противном случае продолжайте цикл, пока пользователь не выберет выход из XR-режима.
- Для завершения XR-сессии вручную вызовите
XRSession.end(). - Включите обработчик события
XRSessionend, чтобы получать уведомления о завершении сессии, независимо от того, было ли инициировано завершение кодом, пользователем или браузером.
- Для завершения XR-сессии вручную вызовите
© 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/WebXR_Device_API/Lifecycle