---
title: WebVR API
slug: Web/API/WebVR_API
translation_of: Web/API/WebVR_API
---
{{SeeCompatTable}}{{APIRef("WebVR API")}}
WebVR обеспечивает поддержку для использования устройств виртуальной реальности — например, шлемы виртуальной реальности, таких как Oculus Rift или HTC Vive — для веб-приложений, позволяя разработчикам передавать информацию о местоположении и движения с дисплея в движение вокруг 3D-сцены. Это имеет множество интересных приложений, от виртуальных туров продукта и интерактивных обучающих приложений до захватывающих игр от первого лица.
Концепция и использование
Любые VR-устройства, подключённые к вашему компьютеру, будут возвращены методом {{domxref("Navigator.getVRDisplays()")}}; каждое из которых будет представлено {{domxref("VRDisplay")}} объектом.
{{domxref("VRDisplay")}} является центральным интерфейсом в API WebVR - с помощью его свойств и методов вы получить доступ к функциям:
- Получить полезную информацию, чтобы мы могли идентифицировать дисплей, какие возможности он имеет, контроллеры, связанные с ним и многое другое.
- Получить {{domxref("VRFrameData", "frame data")}} для каждого кадра контента, который вы хотите представить на дисплее, и отправьте эти кадры для отображения с постоянной скоростью.
- Начать и прекратить подачу на дисплей.
Типичное (простое) WebVR приложение будет работать так:
- {{domxref("Navigator.getVRDisplays()")}} используется для получения ссылки на ваш VR-дисплей.
- {{domxref("VRDisplay.requestPresent()")}} используется для начала представления на дисплей VR.
- Выделенный {{domxref("VRDisplay.requestAnimationFrame()")}} WebVR's используется для запуска цикла рендеринга приложения с правильной частотой обновления для отображения.
- Внутри цикла рендеринга берутся данные, необходимые для отображения текущего кадра ({{domxref("VRDisplay.getFrameData()")}}), дважды нарисуйте отображаемую сцену - один раз для просмотра в каждом глазу, затем отправьте отображаемый вид на дисплей, чтобы показать пользователю ({{domxref("VRDisplay.submitFrame()")}}).
Кроме того, WebVR 1.1 добавляет ряд событий {{domxref("Window")}} объекту, чтобы JavaScript мог реагировать на изменения состояния дисплея.
Использование контроллеров: Объединение WebVR с API-интерфейсом геймпада
Многие аппаратные настройки WebVR оснащены контроллерами, которые сочетаются с гарнитурой. Они могут быть использованы в WebVR приложениях через Gamepad API, и, в частности, Gamepad расширения API, которые добавляют API функции для доступа к позе контроллера, haptic actuators, и многое другое.
WebVR Интерфейс
- {{domxref("VRDisplay")}}
- Представляет любое устройство VR, поддерживаемое этим API. VRDisplay включает в себя общую информацию, такую как идентификаторы устройств и описания, а также методы для начала представления сцены VR, получения параметров глаз и возможностей отображения и других важных функций.
- {{domxref("VRDisplayCapabilities")}}
- описывает возможности {{domxref("VRDisplay")}} — его функции могут использоваться для тестирования возможностей устройства VR, например, может ли он возвращать информацию о местоположении.
- {{domxref("VRDisplayEvent")}}
- Возвращает объект события (event) связанного с WebVR-событием (см. {{anch("Window", "window object extensions")}} , перечисленных ниже).
- {{domxref("VRFrameData")}}
- Представляет всю информацию, необходимую для создания одного кадра сцены VR; созданный от {{domxref("VRDisplay.getFrameData()")}}.
- {{domxref("VRPose")}}
- Представляет состояние позиции на заданной временной отметке (которая включает в себя ориентацию, положение, скорость и ускорение).
- {{domxref("VREyeParameters")}}
- Предоставляет доступ ко все информации, необходимой для корректного отображения сцены для каждого заднего глаза, включая информацию о поле зрения.
- {{domxref("VRFieldOfView")}}
- Представляет поле зрения, определённое четырьмя различными значениями степени, описывающими представление из центральной точки.
- {{domxref("VRLayerInit")}}
- Представляет слой, который должен быть представлен в {{domxref("VRDisplay")}}.
- {{domxref("VRStageParameters")}}
- Представляет значения, описывающие область сцены для устройств, поддерживающих опыт в помещении.
Расширения для других интерфейсов
WebVR API расширяет следующие API, добавляя перечисленные функции.
Геймпад
- {{domxref("Gamepad.displayId")}} {{readonlyInline}}
- Возвращает {{domxref("VRDisplay.displayId")}} связанного с {{domxref("VRDisplay")}} —
VRDisplay
, которым геймпад управляет отображаемой сценой.
Навигатор
- {{domxref("Navigator.activeVRDisplays")}} {{readonlyInline}}
- Возвращает массив, содержащий каждый {{domxref("VRDisplay")}} объект, который в настоящее время отображается ({{domxref("VRDisplay.ispresenting")}} является
true
).
- {{domxref("Navigator.getVRDisplays()")}}
- Возвращает промис, который преобразуется в массив {{domxref("VRDisplay")}} объектов, представляющих любые доступные VR-дисплеи, подключённые к компьютеру.
Window события
- {{domxref("Window.onvrdisplaypresentchange")}}
- Представляет обработчик событий, который будет выполняться, при изменении состояния отображения VR-дисплея — т.е. идёт от отображения до неотображения, или наоборот (когда {{event("vrdisplaypresentchange")}} событие срабатывает).
- {{domxref("Window.onvrdisplayconnect")}}
- Представляет обработчик событий, который будет запускаться, когда к компьютеру подключён совместимый VR-дисплей (когда {{event("vrdisplayconnect")}} событие срабатывает).
- {{domxref("Window.onvrdisplaydisconnect")}}
- Представляет обработчик событий, который будет запускаться, когда совместимый VR-дисплей был отключён от компьютера (когда {{event("vrdisplaydisconnect")}} событие срабатывает).
- {{domxref("Window.onvrdisplayactivate")}}
- Представляет обработчик событий, который будет выполняться, когда дисплей может быть представлен (когда {{event("vrdisplayactivate")}}событие срабатывает), например, HMD (Head Mounted Display) был перемещён, чтобы вывести его из режима ожидания, или проснулся, будучи перемещённым.
- {{domxref("Window.onvrdisplaydeactivate")}}
- Представляет обработчик событий, который будет запускаться, когда дисплей больше не будет отображаться (когда {{event("vrdisplaydeactivate")}} событие срабатывает), например, HMD (Head Mounted Display) перешёл в режим ожидания или спящий режим из-за периода бездействия.
Невыполненные window события
Следующие события перечислены в спецификации, but do not currently seem to be implemented anywhere as yet.
- {{domxref("Window.onvrdisplayblur")}}
- Представляет обработчик событий, который будет выполняться, когда презентация на дисплей была приостановлена по какой-то причине в браузере, ОС или оборудованием VR (когда {{event("vrdisplayblur")}} событие срабатывает) — например, в то время как пользователь взаимодействует с системным меню или браузером, чтобы предотвратить отслеживание или потерю опыта.
- {{domxref("Window.onvrdisplayfocus")}}
- Представляет обработчик событий, который будет выполняться, когда презентация на дисплей возобновляется после потери фокуса (когда {{event("vrdisplayfocus")}} событие срабатывает).
Примеры
Вы можете найти несколько примеров в этих местах:
Спецификация
Спецификация |
Статус |
Комментарий |
{{SpecName("GamepadExtensions")}} |
{{Spec2("GamepadExtensions")}} |
Определяет Experimental Gamepad extensions.
|
{{SpecName('WebVR 1.1')}} |
{{Spec2('WebVR 1.1')}} |
Первоначальное определение |
Совместимость с браузерами
{{Compat("api.Navigator.getVRDisplays")}}
Смотрите также
- vr.mozilla.org — Основная посадочная площадка Mozilla для WebVR с демонстрационными материалами, утилитами и другой информацией.
- A-Frame — Веб-платформа с открытым исходным кодом для создания опыта VR.
- webvr.info — Актуальная информация о WebVR, настройке браузера и сообществе.
- MozVr.com — Демонстрации, загрузки и другие ресурсы от команды Mozilla VR.
- threejs-vr-boilerplate — Полезный стартовый шаблон для написания приложений WebVR.
- Web VR polyfill — JavaScript-реализация WebVR.