XRHitTestResult

可用性有限

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

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

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

XRHitTestResult 介面是 WebXR 裝置 API 的一部分,包含單次命中測試的結果。您可以透過呼叫 XRFrame.getHitTestResults() 來獲取一幀中 XRHitTestResult 物件陣列。

例項屬性

無。

例項方法

XRHitTestResult.createAnchor() 實驗性

返回一個 Promise,該 Promise 解析為一個從命中測試結果建立的 XRAnchor

XRHitTestResult.getPose() 實驗性

返回命中測試結果相對於給定基礎空間(base space)的 XRPose

示例

在幀迴圈中獲取 XRHitTestResult 物件

除了在幀迴圈中顯示 XRHitTestResult 之外,此示例還演示了在請求此物件之前必須執行的幾項操作。在設定會話時,請將 "hit-test" 指定為 requiredFeatures 之一。接下來,呼叫 XRSession.requestHitTestSource() 並傳入所需的引用(透過呼叫 XRSession.requestReferenceSpace() 獲取)。這將返回一個 XRHitTestSource。您將在幀迴圈中使用它來獲取 XRHitTestResult 物件。

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
}

獲取命中測試結果的姿態

使用 getPose() 來查詢結果的姿態。

js
let hitTestResults = xrFrame.getHitTestResults(hitTestSource);

if (hitTestResults.length > 0) {
  let pose = hitTestResults[0].getPose(referenceSpace);
}

從命中測試結果建立錨點

一旦使用命中測試在現實世界表面上找到交點,您就可以建立一個 XRAnchor 將虛擬物件附加到該位置。

js
hitTestResult.createAnchor().then(
  (anchor) => {
    // add anchored objects to the scene
  },
  (error) => {
    console.error(`Could not create anchor: ${error}`);
  },
);

規範

規範
WebXR Hit Test 模組
# xr-hit-test-result-interface

瀏覽器相容性

另見