XRSession: requestHitTestSource() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

requestHitTestSource() 方法是 XRSession 介面的一部分,它返回一個 Promise,該 Promise 會解析出一個 XRHitTestSource 物件,這個物件可以傳遞給 XRFrame.getHitTestResults()

語法

js
requestHitTestSource(options)

引數

options

一個包含配置選項的物件,具體來說是

space

由命中測試源跟蹤的 XRSpace

entityTypes 可選

一個 Array,用於指定用於建立命中測試源的實體型別。如果未指定實體型別,則陣列預設為包含單個元素 plane 型別。可能的型別

  • point:根據檢測到的特徵點計算命中測試結果。
  • plane:根據檢測到的真實世界平面計算命中測試結果。
  • mesh:根據檢測到的網格計算命中測試結果。
offsetRay 可選

用於執行命中測試的 XRRay 物件。如果未提供 XRRay 物件,則會構造一個不帶任何引數的新 XRRay 物件。

返回值

一個 Promise,它解析出一個 XRHitTestSource 物件。

異常

requestHitTestSource() 不會丟擲真正的異常,而是使用 DOMException 來拒絕返回的 Promise,具體來說是以下之一:

NotSupportedError DOMException

如果在 XRSystem.requestSession() 中未啟用 hit-test 功能,則會丟擲此異常。

InvalidStateError DOMException

如果會話已結束,則會丟擲此異常。

NotAllowedError DOMException

如果請求數量過多,則會丟擲此異常。某些使用者代理可能會出於隱私原因限制使用。

示例

請求命中測試源

要請求命中測試源,請使用啟用了 hit-test 會話功能的 XRSession 啟動會話。接下來,配置命中測試源並將其儲存以備在幀迴圈中使用,然後呼叫 XRFrame.getHitTestResults() 以獲取結果。

js
const xrSession = navigator.xr.requestSession("immersive-ar", {
  requiredFeatures: ["local", "hit-test"],
});

let hitTestSource = null;

xrSession
  .requestHitTestSource({
    space: viewerSpace, // obtained from xrSession.requestReferenceSpace("viewer");
    offsetRay: new XRRay({ y: 0.5 }),
  })
  .then((viewerHitTestSource) => {
    hitTestSource = viewerHitTestSource;
  });

// frame loop
function onXRFrame(time, xrFrame) {
  let hitTestResults = xrFrame.getHitTestResults(hitTestSource);

  // do things with the hit test results
}

規範

規範
WebXR Hit Test 模組
# dom-xrsession-requesthittestsource

瀏覽器相容性

另見