XRSession: requestHitTestSourceForTransientInput() 方法

可用性有限

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

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

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

XRSession 介面的 requestHitTestSourceForTransientInput() 方法返回一個 Promise,該 Promise 解析為一個 XRTransientInputHitTestSource 物件,該物件可以傳遞給 XRFrame.getHitTestResultsForTransientInput()

語法

js
requestHitTestSourceForTransientInput(options)

引數

options

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

profile

一個字串,指定將用於計算命中測試結果的瞬態輸入源的 輸入配置檔名稱

entityTypes 可選

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

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

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

返回值

一個 Promise,該 Promise 解析為一個 XRTransientInputHitTestSource 物件。

異常

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

NotSupportedError DOMException

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

InvalidStateError DOMException

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

NotAllowedError DOMException

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

示例

請求瞬態命中測試源

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

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

let transientHitTestSource = null;

xrSession
  .requestHitTestSourceForTransientInput({
    profile: "generic-touchscreen",
    offsetRay: new XRRay(),
  })
  .then((touchScreenHitTestSource) => {
    transientHitTestSource = touchScreenHitTestSource;
  });

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

  // do things with the transient hit test results
}

規範

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

瀏覽器相容性

另見