为什么在WebXR中错误地计算了光线投射方向?

时间:2018-02-27 13:30:52

标签: javascript three.js augmented-reality aframe

我正在尝试在基于网络的增强现实应用中使用常规 Three.js光线投射(与AR命中测试相反,这个问题不是关于真实飞机上的命中测试)

网络应用程序使用带有aframe-xr component的A-Frame在适用于iOS的WebXR Viewer和适用于Android的WebARCore中获得WebXR支持,并且增强现实在这两个实验性浏览器中的工作正常。

但是,aframe-xr或其中包含的three.xr.jsWebXR polyfill库中的某些内容会导致实验中光线投射的方向向量投影错误支持WebXR的浏览器。光线投射的原点很好(在相机的当前位置),但是方向始终偏移到下方(y坐标太小)并略微偏向左侧(x坐标太小)应该在哪里是。

巧妙地(或不是),y似乎在1.6米A-Frame附近偏移,默认情况下偏移相机。或者习惯,因为这似乎已经Three.js降级为A-Frame aframe-xr 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 | 依赖于工作。{/ p>

一般来说,这不是光线投射的问题,正如reproduction of the issue in Glitch所证明的那样,我的测试结果如下:

webxr-polyfill

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

这些示例的代码位于:https://glitch.com/edit/#!/delirious-watch

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

奖励信息:我还使用aframe-ar component中的separate glitch here对此进行了测试。 Raycasting在Android上的WebARCore中正常工作(我相信webxr polyfill 使用),但不正确,虽然在iPad上的WebXR Viewer中有不同的偏移量(我相信webxr polyfill 使用)。

更新:根据下面Roberto的评论,将{{1}}中的SITTING_EYE_HEIGHT常量更改为0是向正确方向迈出的一步,但不是完整的解决方案。通过该更改 - can be tried here - 如果我在移动或旋转设备之前加载网页并进行光线投射,则实际上会正确计算光线投射方向,但只要我移动或旋转设备,光线投射方向就不正确。

1 个答案:

答案 0 :(得分:4)

我对填充代码没那么多(我在iOS浏览器上工作),但我记得在polyfill中的某个地方有一个SITTING_EYE_HEIGHT常量。 它目前设置为1.1米。也许您应该使用该值来补偿代码中的高度。 这是确切的行: https://github.com/mozilla/webxr-polyfill/blob/e4fa65a9bdb09e8e753014436d2f5b76c949e047/polyfill/XRViewPose.js#L57