VRDisplay: phương thức requestPresent()
Deprecated: This feature is no longer recommended. Though some browsers might still support it, it may have already been removed from the relevant web standards, may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using it, and update existing code if possible; see the compatibility table at the bottom of this page to guide your decision. Be aware that this feature may cease to work at any time.
Non-standard: This feature is not standardized. We do not recommend using non-standard features in production, as they have limited browser support, and may change or be removed. However, they can be a suitable alternative in specific cases where no standard option exists.
Phương thức requestPresent() của giao diện VRDisplay bắt đầu cho VRDisplay trình chiếu cảnh.
Note: Phương thức này là một phần của WebVR API cũ. Nó đã được thay thế bởi WebXR Device API.
Cú pháp
requestPresent(layers)
Tham số
layers-
Một mảng các đối tượng
VRLayerInitđại diện cho cảnh bạn muốn trình chiếu. Hiện tại, số lượng tối thiểu là 0 và tối đa là 1.
Giá trị trả về
Một promise được giải quyết khi quá trình trình chiếu bắt đầu. Có một số quy tắc liên quan đến việc promise được thực hiện hay bị từ chối:
- Nếu
VRDisplayCapabilities.canPresentlà false, hoặc nếu mảng VRLayer chứa nhiều hơnVRDisplayCapabilities.maxLayerslớp, promise sẽ bị từ chối. - Nếu
VRDisplayđã đang trình chiếu khirequestPresent()được gọi,VRDisplaysẽ cập nhật mảngVRLayerđang được trình chiếu. - Nếu một lời gọi
requestPresent()bị từ chối trong khiVRDisplayđang trình chiếu, nó sẽ kết thúc quá trình trình chiếu. - Nếu
requestPresent()được gọi ngoài một cử chỉ tương tác, promise sẽ bị từ chối trừ khiVRDisplayđã đang trình chiếu. Cử chỉ tương tác này cũng đủ để cho phép các lời gọirequestPointerLock()cho đến khi quá trình trình chiếu kết thúc.
Ví dụ
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();
}
});
}
});
}
Note: Bạn có thể xem toàn bộ mã này tại raw-webgl-example.
Thông số kỹ thuật
Phương thức này là một phần của WebVR API cũ đã được thay thế bởi WebXR Device API. Nó không còn trên đường trở thành tiêu chuẩn nữa.
Cho đến khi tất cả các trình duyệt đã triển khai WebXR API mới, khuyến nghị sử dụng các framework như A-Frame, Babylon.js, hoặc Three.js, hay một polyfill, để phát triển ứng dụng WebXR hoạt động trên tất cả các trình duyệt. Đọc hướng dẫn Porting from WebVR to WebXR của Meta để biết thêm thông tin.