为什么WebXR中的射线方向计算不正确?

12

我正在尝试在基于Web的增强现实应用程序中使用Three.js的普通射线投射(与AR命中测试相反,此问题与在真实平面上进行的命中测试无关)。

Web应用程序使用A-Frame与aframe-xr组件,以获得WebXR Viewer for iOS和WebARCore for Android的WebXR支持,在这两个实验性浏览器中,增强现实总体上运作良好。

但是,在使用WebXR支持的实验性浏览器中,aframe-xrthree.xr.jsWebXR polyfill库中的某些内容会导致射线投射的方向矢量投影不正确。投射的起点没问题(在相机的当前位置),但方向总是偏离了(y坐标太小),并且稍微向左(x坐标太小)偏移了。

巧合的是(或不是),y似乎偏移了约1.6米,默认情况下由A-Frame抵消的相机。或者过去曾经是这样,因为这似乎已被归入aframe-xr所依赖的最新(未发布)版本的A-Frame中。

这并不是射线投射总体上的问题,如在Glitch中复制此问题所示,我的测试结果如下:

Device/Example run     | Normal 0.7.0   |   WebXR       |   Normal 0.8.0   |
-----------------------|----------------|---------------|------------------|   
Windows Chrome w/mouse |   Correct      |   Correct     |       Correct    |
S8 Chrome              |   Correct      |   Correct     |       Correct    |
S8 WebARCore           |   Correct      |   Incorrect   |       Correct    |
iPad Safari            |   Correct      |   Correct     |       Correct    |
iPad WebXR Viewer      |   Correct      |   Incorrect   |       Correct    |

“正确”指方向按预期计算,球体出现在我的手指或鼠标光标正下方,“不正确”指方向向量计算错误,球体出现在错误的位置。

这些示例的代码在此处:https://glitch.com/edit/#!/delirious-watch

WebXR库中发生了什么来抵消计算出的射线投射方向,如何修复?

额外信息:我还使用aframe-ar组件这里进行了测试。在安卓的WebARCore上射线投射工作正常(在那里,我相信没有使用webxr polyfill),但在iPad的WebXR Viewer上,虽然存在不同的偏移,但投射是不正确的(在那里,我相信使用了webxr polyfill)。

更新:根据下面Roberto的评论,将webxr-polyfill中的SITTING_EYE_HEIGHT常量更改为0是朝着正确方向迈出的一步,但不是完整解决方案。通过该更改-可以尝试在此处 - 如果我在移动或旋转设备之前加载网页并进行射线投射,则实际上会正确计算射线投射方向,但一旦我移动或旋转设备,射线投射方向就是不正确的。

1个回答

4

我可以确认,将这个常量从 1.1 更改为 0 会导致射线投射器中 direction 向量的 y 坐标部分正确,但 x 坐标部分仍然偏左 0.3-0.5 米。换句话说:通过这个更改,绿色球的高度是正确的,但在 x 轴上仍然有偏差。 - Casper Fabricius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接