VRDisplay.requestPresent()

Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

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

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

Синтаксис

vrDisplayInstance.requestPresent(layers).then(function() {
  //Действия после начала отображения сцены
});

Параметры

layers
Массив объектов типа VRLayerInit, представляющих собой сцену, которую Вы хотите отобразить. На данный момент может быть минимум 0 элементов, максимум - 1.

Возвращаемое значение

Объект типа Promise, переходящий в состояние "выполнено" в момент начала отображения сцены. Существует ряд правил, касающийся перехода Promise в состояние "выполнено" и в состояние "отклонено":

  • Если VRDisplayCapabilities.canPresent ложно или если массив объектов VRLayer содержит более чем VRDisplayCapabilities.maxLayers слоев, произойдёт переход в состояние "отклонено".
  • Если объект VRDisplay уже отображает сцену, то вызов его метода requestPresent() обновит массив отображаемых VRLayer объектов.
  • Если объект VRDisplay уже отображает сцену, а вызов метода requestPresent() приведет к возврату Promise в состоянии "отклонено", то отображение сцены прекратится.
  • If requestPresent() is called outside of an engagement gesture the promise will be rejected unless the VRDisplay was already presenting. This engagement gesture is also sufficient to allow requestPointerLock() calls until presentation has ended.

Examples

if(navigator.getVRDisplays) {
  console.log('WebVR 1.1 supported');
  // Then get the displays attached to the computer
  navigator.getVRDisplays().then(function(displays) {
    // If a display is available, use it to present the scene
    if(displays.length > 0) {
      vrDisplay = displays[0];
      console.log('Display found');
      // Starting the presentation when the button is clicked: It can only be called in response to a user gesture
      btn.addEventListener('click', function() {
        if(btn.textContent === 'Start VR display') {
          vrDisplay.requestPresent([{ source: canvas }]).then(function() {
            console.log('Presenting to WebVR display');

            // Set the canvas size to the size of the vrDisplay viewport

            var leftEye = vrDisplay.getEyeParameters('left');
            var rightEye = vrDisplay.getEyeParameters('right');

            canvas.width = Math.max(leftEye.renderWidth, rightEye.renderWidth) * 2;
            canvas.height = Math.max(leftEye.renderHeight, rightEye.renderHeight);

            // stop the normal presentation, and start the vr presentation
            window.cancelAnimationFrame(normalSceneFrame);
            drawVRScene();

            btn.textContent = 'Exit VR display';
          });
        } else {
          vrDisplay.exitPresent();
          console.log('Stopped presenting to WebVR display');

          btn.textContent = 'Start VR display';

          // Stop the VR presentation, and start the normal presentation
          vrDisplay.cancelAnimationFrame(vrSceneFrame);
          drawScene();
        }
      });
    }
  });
}

Note: You can see this complete code at raw-webgl-example.

Specifications

Specification Status Comment
WebVR 1.1
Определение 'requestPresent()' в этой спецификации.
Черновик Initial definition

Browser compatibility

Update compatibility data on GitHub
КомпьютерыМобильные
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidFirefox для AndroidOpera для AndroidSafari on iOSSamsung Internet
requestPresent
Экспериментальная
Chrome Нет поддержки НетEdge Полная поддержка 15Firefox Полная поддержка 55
Замечания
Полная поддержка 55
Замечания
Замечания Windows support was enabled in Firefox 55.
Полная поддержка 64
Замечания
Замечания macOS support was enabled in Firefox 64.
IE Нет поддержки НетOpera ? Safari ? WebView Android Нет поддержки НетChrome Android Полная поддержка 56
Замечания Отключено
Полная поддержка 56
Замечания Отключено
Замечания Only works in an experimental version of Chrome. (Other builds won't return any devices when Navigator.getVRDisplays() is invoked.)
Замечания Daydream View supported in Chrome 56.
Замечания Google Cardboard supported in Chrome 57.
Отключено From version 56: this feature is behind the WebVR preference. To change preferences in Chrome, visit chrome://flags.
Firefox Android Полная поддержка 55Opera Android ? Safari iOS ? Samsung Internet Android Полная поддержка 6.0

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки
Совместимость неизвестна  
Совместимость неизвестна
Экспериментальная. Ожидаемое поведение может измениться в будущем.
Экспериментальная. Ожидаемое поведение может измениться в будущем.
Смотрите замечания реализации.
Смотрите замечания реализации.
Пользователь должен сам включить эту возможность.
Пользователь должен сам включить эту возможность.

See also

Метки документа и участники

Внесли вклад в эту страницу: mdnwebdocs-bot, D-Koganov
Обновлялась последний раз: mdnwebdocs-bot,