WebVR API
=========

**Экспериментальная возможность:** **Это экспериментальная технология**  
Так как спецификация этой технологии ещё не стабилизировалась, смотрите таблицу совместимости по поводу использования в различных браузерах. Также заметьте, что синтаксис и поведение экспериментальной технологии может измениться в будущих версиях браузеров, вслед за изменениями спецификации.

WebVR обеспечивает поддержку для использования устройств виртуальной реальности — например, шлемы виртуальной реальности, таких как Oculus Rift или HTC Vive — для веб-приложений, позволяя разработчикам передавать информацию о местоположении и движения с дисплея в движение вокруг 3D-сцены. Это имеет множество интересных приложений, от виртуальных туров продукта и интерактивных обучающих приложений до захватывающих игр от первого лица.

Концепция и использование
-------------------------

Любые VR-устройства, подключённые к вашему компьютеру, будут возвращены методом `Navigator.getVRDisplays()`; каждое из которых будет представлено `VRDisplay` (en-US) объектом.

![Sketch of a person in a chair with wearing goggles labelled "Head mounted display (HMD)" facing a monitor with a webcam labelled "Position sensor"](/ru/docs/Web/API/WebVR_API/hw-setup.png)

`VRDisplay` (en-US) является центральным интерфейсом в API WebVR - с помощью его свойств и методов вы получить доступ к функциям:

* Получить полезную информацию, чтобы мы могли идентифицировать дисплей, какие возможности он имеет, контроллеры, связанные с ним и многое другое.
* Получить `frame data` для каждого кадра контента, который вы хотите представить на дисплее, и отправьте эти кадры для отображения с постоянной скоростью.
* Начать и прекратить подачу на дисплей.

Типичное (простое) WebVR приложение будет работать так:

1. `Navigator.getVRDisplays()` используется для получения ссылки на ваш VR-дисплей.
2. `VRDisplay.requestPresent()` используется для начала представления на дисплей VR.
3. Выделенный `VRDisplay.requestAnimationFrame()` WebVR's используется для запуска цикла рендеринга приложения с правильной частотой обновления для отображения.
4. Внутри цикла рендеринга берутся данные, необходимые для отображения текущего кадра (`VRDisplay.getFrameData()` (en-US)), дважды нарисуйте отображаемую сцену - один раз для просмотра в каждом глазу, затем отправьте отображаемый вид на дисплей, чтобы показать пользователю (`VRDisplay.submitFrame()` (en-US)).

Кроме того, WebVR 1.1 добавляет ряд событий `Window` объекту, чтобы JavaScript мог реагировать на изменения состояния дисплея.

**Примечание:** вы можете найти намного больше о том, как работает API в Using the WebVR API и WebVR Concepts (en-US) статьях.

### Использование контроллеров: Объединение WebVR с API-интерфейсом геймпада

Многие аппаратные настройки WebVR оснащены контроллерами, которые сочетаются с гарнитурой. Они могут быть использованы в WebVR приложениях через Gamepad API, и, в частности, Gamepad расширения API, которые добавляют API функции для доступа к позе контроллера (en-US), haptic actuators (en-US), и многое другое.

**Примечание:** Наша Using VR controllers with WebVR (en-US) статья объясняет основы использования VR-контроллеров в приложениях WebVR.

WebVR Интерфейс
---------------

`VRDisplay` (en-US)

Представляет любое устройство VR, поддерживаемое этим API. VRDisplay включает в себя общую информацию, такую как идентификаторы устройств и описания, а также методы для начала представления сцены VR, получения параметров глаз и возможностей отображения и других важных функций.

`VRDisplayCapabilities`

описывает возможности `VRDisplay` (en-US) — его функции могут использоваться для тестирования возможностей устройства VR, например, может ли он возвращать информацию о местоположении.

`VRDisplayEvent`

Возвращает объект события (event) связанного с WebVR-событием (см. window object extensions , перечисленных ниже).

`VRFrameData`

Представляет всю информацию, необходимую для создания одного кадра сцены VR; созданный от `VRDisplay.getFrameData()` (en-US).

`VRPose` (en-US)

Представляет состояние позиции на заданной временной отметке (которая включает в себя ориентацию, положение, скорость и ускорение).

`VREyeParameters` (en-US)

Предоставляет доступ ко все информации, необходимой для корректного отображения сцены для каждого заднего глаза, включая информацию о поле зрения.

`VRFieldOfView` (en-US)

Представляет поле зрения, определённое четырьмя различными значениями степени, описывающими представление из центральной точки.

`VRLayerInit` (en-US)

Представляет слой, который должен быть представлен в `VRDisplay` (en-US).

`VRStageParameters` (en-US)

Представляет значения, описывающие область сцены для устройств, поддерживающих опыт в помещении.

### Расширения для других интерфейсов

WebVR API расширяет следующие API, добавляя перечисленные функции.

#### Геймпад

`Gamepad.displayId` Только для чтения 

*Возвращает `VRDisplay.displayId` (en-US) связанного с `VRDisplay` (en-US) — `VRDisplay` , которым геймпад управляет отображаемой сценой.*

#### Навигатор

`Navigator.activeVRDisplays` (en-US) Только для чтения 

Возвращает массив, содержащий каждый `VRDisplay` (en-US) объект, который в настоящее время отображается (`VRDisplay.ispresenting` (en-US) является `true`).

`Navigator.getVRDisplays()`

Возвращает промис, который преобразуется в массив `VRDisplay` (en-US) объектов, представляющих любые доступные VR-дисплеи, подключённые к компьютеру.

#### Window события

`Window.onvrdisplaypresentchange` (en-US)

Представляет обработчик событий, который будет выполняться, при изменении состояния отображения VR-дисплея — т.е. идёт от отображения до неотображения, или наоборот (когда `vrdisplaypresentchange` событие срабатывает).

`Window.onvrdisplayconnect` (en-US)

Представляет обработчик событий, который будет запускаться, когда к компьютеру подключён совместимый VR-дисплей (когда `vrdisplayconnect` событие срабатывает).

`Window.onvrdisplaydisconnect` (en-US)

Представляет обработчик событий, который будет запускаться, когда совместимый VR-дисплей был отключён от компьютера (когда `vrdisplaydisconnect` событие срабатывает).

`Window.onvrdisplayactivate` (en-US)

Представляет обработчик событий, который будет выполняться, когда дисплей может быть представлен (когда `vrdisplayactivate`событие срабатывает), например, HMD (Head Mounted Display) был перемещён, чтобы вывести его из режима ожидания, или проснулся, будучи перемещённым.

`Window.onvrdisplaydeactivate` (en-US)

Представляет обработчик событий, который будет запускаться, когда дисплей больше не будет отображаться (когда `vrdisplaydeactivate` событие срабатывает), например, HMD (Head Mounted Display) перешёл в режим ожидания или спящий режим из-за периода бездействия.

#### Невыполненные window события

Следующие события перечислены в спецификации, but do not currently seem to be implemented anywhere as yet.

`Window.onvrdisplayblur` (en-US)

Представляет обработчик событий, который будет выполняться, когда презентация на дисплей была приостановлена по какой-то причине в браузере, ОС или оборудованием VR (когда `vrdisplayblur` событие срабатывает) — например, в то время как пользователь взаимодействует с системным меню или браузером, чтобы предотвратить отслеживание или потерю опыта.

`Window.onvrdisplayfocus` (en-US)

Представляет обработчик событий, который будет выполняться, когда презентация на дисплей возобновляется после потери фокуса (когда `vrdisplayfocus` событие срабатывает).

Примеры
-------

Вы можете найти несколько примеров в этих местах:

* webvr-tests — очень простые примеры для сопровождения MDM WebVR документации.
* Carmel starter kit — простые, хорошо прокомментированные примеры, которые идут вместе с Carmel,браузером WebVR от Facebook's .
* WebVR.info samples — несколько более подробных примеров плюс исходный код
* WebVR.rocks Firefox demos — демонстрация примеров
* A-Frame homepage — примеры использования A-Frame
Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* vr.mozilla.org — Основная посадочная площадка Mozilla для WebVR с демонстрационными материалами, утилитами и другой информацией.
* A-Frame — Веб-платформа с открытым исходным кодом для создания опыта VR.
* webvr.info — Актуальная информация о WebVR, настройке браузера и сообществе.
* threejs-vr-boilerplate — Полезный стартовый шаблон для написания приложений WebVR.
* Web VR polyfill — JavaScript-реализация WebVR.