VRDisplay: метод submitFrame()
Устаревший: Эта функция больше не рекомендуется. Хотя некоторые браузеры могут её поддерживать, она может быть удалена из соответствующих веб-стандартов, находится в процессе удаления или поддерживается только для совместимости. Избегайте её использования и, если возможно, обновите существующий код; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любое время.
Нестандартный: Эта функция нестандартна и не соответствует стандартам. Не используйте её на производственных сайтах, ориентированных на веб: она не будет работать для всех пользователей. Также могут быть значительные несовместимости между реализациями, и поведение может измениться в будущем.
Метод submitFrame() интерфейса VRDisplay захватывает текущее состояние VRLayerInit, который в данный момент отображается, и отображает его на VRDisplay.
Примечание: Этот метод был частью старого API WebVR. Он был заменён API WebXR Device.
Фрейм должен быть затем отрисован с использованием VRPose и матриц, предоставленных последним вызовом getFrameData().
Синтаксис
submitFrame()
Параметры
Нет.
Возвращаемое значение
Нет (undefined).
Примеры
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, который был заменён API WebXR Device. Он больше не соответствует стандартам.
Пока все браузеры не реализуют новые API WebXR, рекомендуется полагаться на фреймворки, такие как A-Frame, Babylon.js или Three.js, или полифил, для разработки приложений WebXR, которые будут работать во всех браузерах. Обратитесь к руководству Meta's Porting from WebVR to WebXR для получения дополнительной информации.
Совместимость с браузерами
| Рабочий стол | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
submitFrame |
Нет | 15–79 | 9864–98Поддержка macOS была включена в Firefox 64.55–98Поддержка Windows была включена в Firefox 55. |
Нет | Нет | Нет | 55–98 | Нет | Нет | 6.0Поддержка Google 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/submitFrame