XRSession: requestHitTestSourceForTransientInput() 方法
XRSession 接口的 requestHitTestSourceForTransientInput() 方法返回一个 Promise,该 Promise 解析为一个 XRTransientInputHitTestSource 对象,该对象可以传递给 XRFrame.getHitTestResultsForTransientInput()。
语法
js
requestHitTestSourceForTransientInput(options)
参数
options-
一个包含配置选项的对象,具体来说是
profile-
一个字符串,指定将用于计算命中测试结果的瞬态输入源的 输入配置文件名称。
entityTypes可选-
一个
Array,指定用于创建命中测试源的实体类型。如果未指定实体类型,则数组默认为一个包含plane类型的单个元素。可能的类型point:基于检测到的特征点计算命中测试结果。plane:基于检测到的真实世界平面计算命中测试结果。mesh:基于检测到的网格计算命中测试结果。
offsetRay可选-
用于执行命中测试的
XRRay对象。如果未提供XRRay对象,则会创建一个新的XRRay对象,而不带任何参数。
返回值
一个 Promise,该 Promise 解析为一个 XRTransientInputHitTestSource 对象。
异常
requestHitTestSourceForTransientInput() 不会抛出真正的异常,而是会使用 DOMException 来拒绝返回的 Promise,具体来说是以下之一
NotSupportedErrorDOMException-
如果
hit-test不是XRSystem.requestSession()中启用的功能,则会抛出此异常。 InvalidStateErrorDOMException-
如果会话已结束,则会抛出此异常。
NotAllowedErrorDOMException-
如果请求数量过多,则会抛出此异常。某些用户代理出于隐私原因可能会限制使用。
示例
请求瞬态命中测试源
要请求命中测试源,请使用启用了 hit-test 会话功能的 XRSession 启动一个会话。接下来,配置命中测试源并将其存储以供以后在帧循环中使用,然后调用 XRFrame.getHitTestResultsForTransientInput() 获取结果。
js
const xrSession = navigator.xr.requestSession("immersive-ar", {
requiredFeatures: ["local", "hit-test"],
});
let transientHitTestSource = null;
xrSession
.requestHitTestSourceForTransientInput({
profile: "generic-touchscreen",
offsetRay: new XRRay(),
})
.then((touchScreenHitTestSource) => {
transientHitTestSource = touchScreenHitTestSource;
});
// frame loop
function onXRFrame(time, xrFrame) {
let hitTestResults = xrFrame.getHitTestResultsForTransientInput(
transientHitTestSource,
);
// do things with the transient hit test results
}
规范
| 规范 |
|---|
| WebXR Hit Test 模块 # dom-xrsession-requesthittestsourcefortransientinput |
浏览器兼容性
加载中…