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,具体来说是以下之一:
- 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 Hit Test 模块 # dom-xrsession-requesthittestsource | 
浏览器兼容性
加载中…