VRDisplay: метод requestPresent()
Устаревший: Эта функция больше не рекомендуется. Несмотря на то, что некоторые браузеры могут её поддерживать, она, возможно, уже удалена из соответствующих веб-стандартов, находится в процессе удаления или поддерживается только для совместимости. Избегайте её использования и, если возможно, обновите существующий код; см. таблицу совместимости внизу этой страницы, чтобы принять решение. Имейте в виду, что эта функция может перестать работать в любой момент.
Нестандартный: Эта функция нестандартна и не соответствует стандартам. Не используйте её на производственных сайтах, ориентированных на веб: она не будет работать для всех пользователей. Также могут быть значительные несовместимости между реализациями, и поведение может измениться в будущем.
Метод requestPresent() интерфейса VRDisplay запускает процесс отображения сцены.
Примечание: Этот метод был частью старого API WebVR. Он был заменён API WebXR Device.
Синтаксис
requestPresent(layers)
Параметры
layers-
Массив объектов
VRLayerInit, представляющих сцену, которую вы хотите отобразить. В данный момент это значение может быть от 0 до 1.
Возвращаемое значение
Обещание, которое выполняется после начала презентации. Существует ряд правил, касающихся выполнения или отклонения обещания:
- Если
VRDisplayCapabilities.canPresentложно или если массив VRLayer содержит более чемVRDisplayCapabilities.maxLayersслоёв, обещание будет отклонено. - Если
VRDisplayуже отображает сцену во время вызоваrequestPresent(), тоVRDisplayобновит массивVRLayerотображаемых объектов. - Если вызов
requestPresent()отклоняется, в то время какVRDisplayуже отображает сцену, то он завершит презентацию. - Если
requestPresent()вызывается вне жеста взаимодействия, обещание будет отклонено, еслиVRDisplayуже не отображал сцену. Этот жест взаимодействия также достаточен для разрешения вызововrequestPointerLock()до завершения презентации.
Примеры
if (navigator.getVRDisplays) {
console.log("WebVR 1.1 supported");
// Then get the displays attached to the computer
navigator.getVRDisplays().then((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", () => {
if (btn.textContent === "Start VR display") {
vrDisplay.requestPresent([{ source: canvas }]).then(() => {
console.log("Presenting to WebVR display");
// Set the canvas size to the size of the vrDisplay viewport
const leftEye = vrDisplay.getEyeParameters("left");
const 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();
}
});
}
});
}
Примечание: Полный код можно посмотреть на странице 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 for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
requestPresent |
Нет | 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/requestPresent