鼠标Coords到Game Coords WebGL

时间:2012-01-06 18:10:16

标签: javascript collision-detection webgl

我正在尝试将鼠标x,y坐标转换为webgl canvas的3d世界坐标。我已经让它部分工作了,但是当世界在任何轴上旋转时我遇到了一些麻烦。

我正在使用unproject方法获取光线的起点/终点,然后对正常0,1,0的平面进行线到平面碰撞测试,并且使用的点是0,0 ,0。

您可以通过查看源来查找wingsofexodus.com处的代码。使用的函数是RtoW(真实世界,鼠标到世界转换),lpi(线平面相交测试)和非项目。

这已经很久了,因为我不得不做任何矩阵/矢量数学,并且经过长时间的努力使这些书变得很难。

该网站可能会变慢,我的互联网连接并不是那么好。如果证明有麻烦,我会将代码复制到这里。

感谢任何可能有帮助的帮助或链接。

1 个答案:

答案 0 :(得分:1)

你有正确的想法,但我看到两个错误和一个不必要的并发症:

  • 复杂化:不是复制代码以从旋转角度等计算视图矩阵,而是在计算它时(在drawScene的开头)保存它的副本并使用它代替mm。或者,确保矩阵堆栈位于正确的位置,并unproject使用mvMatrix。这样可以避免错误。
  • 您可以参考有关非投影结果的翻译(在RtoW中)。这是一个错误,因为翻译已包含在mm中;你要么加倍要么取消它。取消投影鼠标坐标后,您有世界坐标,在进行光线碰撞测试之前无需进一步修改。
  • 在unproject中,您在将视图矩阵与投影矩阵相乘之前将其反转。您可以执行(伪代码)invert(view)*invert(projection)或(更便宜)invert(projection*view),但您目前正在执行invert(projection*invert(view)),这是错误的。

这些是我的意思,但我没有审查你的所有代码。当我将其与my own version of the same进行比较时,无效投影看起来不错。