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

浏览器兼容性

另见