XRSession

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Giao diện XRSession của WebXR Device API biểu diễn một phiên XR đang diễn ra, cung cấp các phương thức và thuộc tính được sử dụng để tương tác và điều khiển phiên. Để mở một phiên WebXR, hãy sử dụng phương thức requestSession() của giao diện XRSystem.

Với các phương thức của XRSession, bạn có thể thăm dò vị trí và hướng của người xem (XRViewerPose), thu thập thông tin về môi trường của người dùng và hiển thị hình ảnh cho người dùng. XRSession hỗ trợ cả chế độ nội tuyến và chế độ thực tế ảo/thực tế tăng cường nhập vai.

EventTarget XRSession

Thuộc tính thể hiện

Ngoài các thuộc tính được liệt kê bên dưới, XRSession kế thừa các thuộc tính từ giao diện cha của nó, EventTarget.

depthDataFormat Experimental Read only

Trả về định dạng dữ liệu cảm biến độ sâu mà phiên đã được cấu hình.

depthUsage Experimental Read only

Trả về cách sử dụng cảm biến độ sâu mà phiên đã được cấu hình.

domOverlayState Experimental Read only

Cung cấp thông tin về lớp phủ DOM, nếu tính năng được bật.

enabledFeatures Experimental Read only

Trả về một mảng các tính năng phiên đã được cấp phép.

environmentBlendMode Experimental Read only

Trả về chế độ hòa trộn của phiên này, cho biết mức độ hiển thị của môi trường thực tế qua thiết bị XR và cách thiết bị sẽ hòa trộn hình ảnh thiết bị với môi trường thực.

inputSources Experimental Read only

Trả về danh sách các XRInputSource của phiên này, mỗi cái biểu diễn một thiết bị đầu vào được sử dụng để điều khiển camera và/hoặc cảnh.

interactionMode Experimental Read only

Trả về chế độ tương tác của phiên này, mô tả không gian tốt nhất (theo tác nhân người dùng) để ứng dụng vẽ giao diện người dùng tương tác cho phiên hiện tại.

preferredReflectionFormat Experimental Read only

Trả về định dạng phản chiếu ưa thích của phiên này được sử dụng cho dữ liệu texture ước tính ánh sáng.

renderState Experimental Read only

Một đối tượng XRRenderState chứa các tùy chọn ảnh hưởng đến cách hình ảnh được kết xuất. Điều này bao gồm các mặt phẳng cắt gần và xa (các khoảng cách xác định vật thể có thể gần và xa đến đâu và vẫn được kết xuất), cũng như thông tin về trường nhìn.

visibilityState Experimental Read only

Một chuỗi cho biết hình ảnh của phiên có hiển thị cho người dùng hay không và nếu có, liệu nó có đang hiển thị nhưng không phải là mục tiêu của sự kiện người dùng hiện tại.

Phương thức thể hiện

Ngoài các phương thức kế thừa từ giao diện cha EventTarget, XRSession cung cấp các phương thức sau.

cancelAnimationFrame() Experimental

Xóa một callback khỏi tập hợp các callback kết xuất khung hình của XRSession, dựa trên giá trị định danh duy nhất được trả về bởi lệnh gọi requestAnimationFrame() trước đó.

end() Experimental

Kết thúc phiên WebXR. Trả về một promise sẽ được resolve khi phiên đã được tắt hoàn toàn.

requestAnimationFrame() Experimental

Lên lịch phương thức được chỉ định để được gọi lần tiếp theo khi user agent đang thực hiện kết xuất một khung hình hoạt ảnh cho thiết bị WebXR. Trả về một giá trị số nguyên có thể được sử dụng để xác định yêu cầu nhằm mục đích hủy callback bằng cancelAnimationFrame(). Phương thức này có thể so sánh với phương thức Window.requestAnimationFrame().

requestHitTestSource() Experimental

Yêu cầu một đối tượng XRHitTestSource xử lý việc đăng ký kiểm tra va chạm.

requestHitTestSourceForTransientInput() Experimental

Yêu cầu một đối tượng XRTransientInputHitTestSource xử lý việc đăng ký kiểm tra va chạm cho nguồn đầu vào tạm thời.

requestLightProbe() Experimental

Yêu cầu một XRLightProbe ước tính thông tin ánh sáng tại một điểm nhất định trong môi trường của người dùng.

requestReferenceSpace() Experimental

Yêu cầu tạo một XRReferenceSpace mới có kiểu được chỉ định. Trả về một promise sẽ resolve với XRReferenceSpace hoặc XRBoundedReferenceSpace đã được yêu cầu, hoặc ném ra một DOMException NotSupportedError nếu kiểu không gian được yêu cầu không được thiết bị hỗ trợ.

updateRenderState() Experimental

Cập nhật các thuộc tính của trạng thái kết xuất phiên.

Sự kiện

Các sự kiện sau được gửi đến các đối tượng XRSession.

end Experimental

Được gửi đến đối tượng XRSession sau khi phiên WebXR đã kết thúc và tất cả các hàm liên quan đến phần cứng đã hoàn tất. Sự kiện được biểu diễn bởi một đối tượng loại XRSessionEvent. Cũng có sẵn thông qua thuộc tính trình xử lý sự kiện onend.

inputsourceschange Experimental

Một sự kiện loại XRInputSourcesChangeEvent được gửi đến XRSession khi danh sách các nguồn đầu vào XR đang hoạt động đã thay đổi. Cũng có sẵn thông qua thuộc tính trình xử lý sự kiện oninputsourceschange.

select Experimental

Một sự kiện loại XRInputSourceEvent được gửi đến phiên khi một trong các nguồn đầu vào của phiên đã hoàn thành thành công một hành động chính. Điều này thường tương ứng với việc người dùng nhấn cò, bàn di chuột hoặc nút, nói lệnh hoặc thực hiện một cử chỉ có thể nhận dạng. Sự kiện select được gửi sau sự kiện selectstart và ngay trước sự kiện selectend. Nếu select không được gửi, thì hành động chọn đã bị hủy bỏ trước khi hoàn tất. Cũng có sẵn thông qua thuộc tính trình xử lý sự kiện onselect.

selectend Experimental

Một sự kiện loại XRInputSourceEvent được gửi đến đối tượng phiên khi một trong các thiết bị đầu vào của nó kết thúc hành động chính hoặc bị ngắt kết nối trong quá trình xử lý hành động chính. Ví dụ: đối với các hành động nút hoặc cò, điều này có nghĩa là nút đã được thả ra; đối với các lệnh nói, điều này có nghĩa là người dùng đã nói xong. Đây là sự kiện cuối cùng trong ba sự kiện select* được gửi. Cũng có sẵn thông qua thuộc tính trình xử lý sự kiện onselectend.

selectstart Experimental

Một sự kiện loại XRInputSourceEvent được gửi đến đối tượng phiên khi một trong các thiết bị đầu vào của nó lần đầu tiên được người dùng kích hoạt theo cách gây ra bắt đầu hành động chính. Đây là sự kiện session* đầu tiên được gửi. Cũng có sẵn thông qua thuộc tính trình xử lý sự kiện onselectstart.

squeeze Experimental

Một XRInputSourceEvent được gửi để cho biết rằng một hành động bóp chính đã hoàn thành thành công. Điều này cho biết thiết bị đang bị bóp đã được thả ra và có thể biểu thị việc thả một đối tượng đã nắm, ví dụ. Nó được gửi ngay trước sự kiện squeezeend để cho biết rằng hành động bóp đã kết thúc. Cũng có sẵn thông qua thuộc tính trình xử lý sự kiện onsqueeze.

squeezeend Experimental

Một XRInputSourceEvent được gửi đến XRSession khi hành động bóp chính kết thúc, bất kể hành động có thành công hay không. Cũng có sẵn bằng cách sử dụng thuộc tính trình xử lý sự kiện onsqueezeend.

squeezestart Experimental

Một sự kiện loại XRInputSourceEvent được gửi đến XRSession khi người dùng bắt đầu bóp một bộ điều khiển có thể bóp. Đây có thể là, ví dụ, một cò được sử dụng để biểu thị việc nắm bắt đối tượng, hoặc có thể biểu thị việc bóp thực tế khi đeo găng xúc giác. Cũng có sẵn thông qua thuộc tính trình xử lý sự kiện onsqueezestart.

visibilitychange Experimental

Một XRSessionEvent được gửi đến phiên khi trạng thái hiển thị của nó được chỉ định bởi visibilityState thay đổi. Cũng có sẵn thông qua thuộc tính trình xử lý sự kiện onvisibilitychange.

Ví dụ

Ví dụ này thiết lập một XRSession mới ở chế độ inline để nó có thể được hiển thị trong một phần tử HTML, tránh nhu cầu sử dụng thiết bị xem AR hoặc VR chuyên dụng như kính thực tế ảo.

js
const XR = navigator.xr;

if (XR) {
  XR.requestSession("inline").then((xrSession) => {
    xrSession.requestReferenceSpace("local").then((xrReferenceSpace) => {
      xrSession.requestAnimationFrame((time, xrFrame) => {
        const viewer = xrFrame.getViewerPose(xrReferenceSpace);

        gl.bindFramebuffer(xrWebGLLayer.framebuffer);

        for (const xrView of viewer.views) {
          const xrViewport = xrWebGLLayer.getViewport(xrView);
          gl.viewport(
            xrViewport.x,
            xrViewport.y,
            xrViewport.width,
            xrViewport.height,
          );
        }
      });
    });
  });
} else {
  /* WebXR is not available */
}

Thông số kỹ thuật

Specification
WebXR Device API
# xrsession-interface

Tương thích trình duyệt