XRSession: requestHitTestSource() 方法
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,具體來說是以下之一:
NotSupportedErrorDOMException-
如果在
XRSystem.requestSession()中未啟用hit-test功能,則會丟擲此異常。 InvalidStateErrorDOMException-
如果會話已結束,則會丟擲此異常。
NotAllowedErrorDOMException-
如果請求數量過多,則會丟擲此異常。某些使用者代理可能會出於隱私原因限制使用。
示例
請求命中測試源
要請求命中測試源,請使用啟用了 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 |
瀏覽器相容性
載入中…