我试图在一个基于网络的增强现实应用程序中使用常规的Three.js光线投射(与AR命中测试不同,这个问题并不是真实飞机上的命中测试)。
这个web应用程序使用A框架与aframe-xr组件一起在WebXR Viewer for iOS和WebARCore for Android中获得WebXR支持,而增强现实在这两种实验性浏览器中一般运行良好。
但是,aframe-xr或three.xr.js和WebXR填充库中的某些内容会导致在实验浏览器中不正确地投影光线投射的方向矢量,并支持WebXR。光线投射的起源是很好的(在相机的当前位置),但方向总是偏移在下面(y坐标太小),稍微向左(x坐标太小)的位置。
巧合的是(或不),y似乎在1.6米的A-Frame附近被抵消了默认的相机。或者说已经习惯了,因为在最新的(未发布的) A-Frame版本中,aframe-xr似乎已经将其降级到了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 |其中,“正确”意味着方向按预期计算,球体出现在我的手指或鼠标光标下,而“不正确”表示方向矢量出现错误,球体出现在错误的位置。
这些示例的代码如下:https://glitch.com/edit/#!/delirious-watch
在WebXR库中发生了什么以抵消计算出的光线投射方向,以及如何修复?
额外信息:我还用aframe-ar组件在这里有单独的故障中测试了这一点。在安卓上的WebARCore中,Raycasting工作正常(我认为webxr的填充是不正确的),但是不正确,尽管iPad上的WebARCore中有不同的偏移量(在iPad上,我相信WebXR的填充是使用的)。
更新:根据罗伯托下面的评论,将webxr-polyfill中的webxr-polyfill常量更改为0是朝着正确方向迈出的一步,但不是完全的解决方案。通过这种改变-- 可以在这里试用 --如果我在移动或旋转设备之前加载网页并做光线广播,光线广播的方向实际上是正确的,但是一旦我移动或旋转设备,光线广播的方向就不正确了。
发布于 2018-02-27 18:39:34
我不太热衷于填充代码(我正在研究iOS查看器),但我记得在这个填充中有一个SITTING_EYE_HEIGHT常量。目前它被设置为1.1米。也许您应该使用这个值来补偿代码中的高度。这是确切的一行:https://github.com/mozilla/webxr-polyfill/blob/e4fa65a9bdb09e8e753014436d2f5b76c949e047/polyfill/XRViewPose.js#L57
https://stackoverflow.com/questions/49009873
复制相似问题