XRSession:requestHitTestSource() 方法

实验性: 这是一个 实验性技术
在生产环境中使用此功能前,请仔细查看 浏览器兼容性表格

安全上下文:此功能仅在 安全上下文(HTTPS)中可用,部分或全部 支持的浏览器 中。

XRSession 接口的 requestHitTestSource() 方法返回一个 Promise,该 Promise 解析为一个 XRHitTestSource 对象,该对象可以传递给 XRFrame.getHitTestResults()

语法

js
requestHitTestSource(options)

参数

options

包含配置选项的对象,具体如下

space

将由命中测试源跟踪的 XRSpace

entityTypes 可选

一个 Array,指定用于创建命中测试源的实体类型。如果未指定实体类型,则数组默认为包含 plane 类型的单个元素。可能的类型

  • point:基于检测到的特征点计算命中测试结果。
  • plane:基于检测到的真实世界平面计算命中测试结果。
  • mesh:基于检测到的网格计算命中测试结果。
offsetRay 可选

将用于执行命中测试的 XRRay 对象。如果没有提供 XRRay 对象,则会构造一个没有参数的新 XRRay 对象。

返回值

一个 Promise,该 Promise 解析为一个 XRHitTestSource 对象。

异常

requestHitTestSource() 不会抛出真正的异常,而是会拒绝返回的 Promise,并使用一个 DOMException 作为拒绝原因,具体来说,会使用以下其中一个:

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 命中测试模块
# dom-xrsession-requesthittestsource

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅