Spec-Zone.ru › Web APIs

VRDisplay: метод requestAnimationFrame()

Устарело: Эта функция больше не рекомендуется. Хотя некоторые браузеры могут её поддерживать, она, возможно, уже удалена из соответствующих веб-стандартов, может быть в процессе удаления или поддерживается только для совместимости. Пожалуйста, избегайте её использования и обновите существующий код, если это возможно; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любое время.

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

Метод requestAnimationFrame() интерфейса VRDisplay — это специальная реализация Window.requestAnimationFrame с функцией обратного вызова, которая вызывается каждый раз, когда отрисовывается новый кадр VRDisplay презентации:

Примечание: Этот метод был частью старого API WebVR. Он был заменён WebXR Device API.

  • Когда VRDisplay не отображает сцену, это функционально эквивалентно Window.requestAnimationFrame.
  • Когда VRDisplay отображает сцену, обратный вызов вызывается с её собственной частотой обновления.

Синтаксис

requestAnimationFrame(callback)

Параметры

callback

Функция обратного вызова, которая вызывается каждый раз, когда отрисовывается новый кадр VRDisplay презентации.

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

Целое число, представляющее дескриптор вызова requestAnimationFrame(). Затем его можно передать в вызов VRDisplay.cancelAnimationFrame() для отмены регистрации обратного вызова.

Примеры

const frameData = new VRFrameData();
let vrDisplay;

navigator.getVRDisplays().then((displays) => {
  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", () => {
    vrDisplay.requestPresent([{ source: canvas }]).then(() => {
      drawVRScene();
    });
  });
});

// WebVR: Draw the scene for the WebVR display.
function drawVRScene() {
  // WebVR: Request the next frame of the animation
  vrSceneFrame = vrDisplay.requestAnimationFrame(drawVRScene);

  // Populate frameData with the data of the next frame to display
  vrDisplay.getFrameData(frameData);

  // You can get the position, orientation, etc. of the display from the current frame's pose
  const curFramePose = frameData.pose;
  const curPos = curFramePose.position;
  const curOrient = curFramePose.orientation;

  // Clear the canvas before we start drawing on it.

  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);

  // WebVR: Create the required projection and view matrix locations needed
  // for passing into the uniformMatrix4fv methods below

  const projectionMatrixLocation = gl.getUniformLocation(
    shaderProgram,
    "projMatrix",
  );
  const viewMatrixLocation = gl.getUniformLocation(shaderProgram, "viewMatrix");

  // WebVR: Render the left eye's view to the left half of the canvas
  gl.viewport(0, 0, canvas.width * 0.5, canvas.height);
  gl.uniformMatrix4fv(
    projectionMatrixLocation,
    false,
    frameData.leftProjectionMatrix,
  );
  gl.uniformMatrix4fv(viewMatrixLocation, false, frameData.leftViewMatrix);
  drawGeometry();

  // WebVR: Render the right eye's view to the right half of the canvas
  gl.viewport(canvas.width * 0.5, 0, canvas.width * 0.5, canvas.height);
  gl.uniformMatrix4fv(
    projectionMatrixLocation,
    false,
    frameData.rightProjectionMatrix,
  );
  gl.uniformMatrix4fv(viewMatrixLocation, false, frameData.rightViewMatrix);
  drawGeometry();

  function drawGeometry() {
    // draw the view for each eye
  }

  // …

  // WebVR: Indicate that we are ready to present the rendered frame to the VR display
  vrDisplay.submitFrame();
}

Примечание: Вы можете увидеть весь этот код на raw-webgl-example.

Спецификации

Этот метод был частью старого API WebVR, который был заменён WebXR Device API. Он больше не соответствует стандартам.

До тех пор, пока все браузеры не реализуют новые WebXR API, рекомендуется использовать фреймворки, такие как A-Frame, Babylon.js или Three.js, или полифил, для разработки приложений WebXR, которые будут работать во всех браузерах. Прочитайте руководство Meta по переносу с WebVR на WebXR для получения дополнительной информации.

Совместимость с браузерами

Рабочие столы Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
requestAnimationFrame Нет 15–79 98
64–98Поддержка macOS была включена в Firefox 64.
55–98Поддержка Windows была включена в Firefox 55.
Нет Нет Нет 55–98 Нет Нет
6.0Google Cardboard поддерживается в Samsung Internet 7.0.
Нет

См. также

  • WebVR API

© 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/VRDisplay/requestAnimationFrame

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API