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

问题描述 投票:10回答:1

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

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

然而,在aframe-xrthree.xr.jsWebXR polyfill库中它包含的内容导致在具有WebXR支持的实验性浏览器中不正确地投射光线投射的方向向量。光线投射的原点很好(在相机的当前位置),但是方向总是在下方偏移(y坐标太小)并且在它应该的位置稍微向左(x坐标太小)偏移。

巧合(或不),y似乎在1.6米附近偏移A-Frame默认偏移相机。或曾经,因为这似乎已经降级到Three.js最新(未发布)版本的A-Frame aframe-xr依赖于工作。

一般来说,这不是光线投射的问题,正如这个reproduction of the issue in 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 component中的separate glitch here对此进行了测试。 Raycasting在Android上的WebARCore中正常工作(我相信不使用webxr polyfill),但是错误的,虽然在iPad上的WebXR Viewer中有不同的偏移量(我相信使用了webxr polyfill)。

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

javascript three.js augmented-reality aframe
1个回答
4
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.