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 | 9864–98Поддержка macOS была включена в Firefox 64.55–98Поддержка Windows была включена в Firefox 55. |
Нет | Нет | Нет | 55–98 | Нет | Нет | 6.0Google Cardboard поддерживается в Samsung Internet 7.0. |
Нет |
См. также
© 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