我正在尝试将鼠标x,y坐标转换为webgl canvas的3d世界坐标。我已经让它部分工作了,但是当世界在任何轴上旋转时我遇到了一些麻烦。
我正在使用unproject方法获取光线的起点/终点,然后对正常0,1,0的平面进行线到平面碰撞测试,并且使用的点是0,0 ,0。
您可以通过查看源来查找wingsofexodus.com处的代码。使用的函数是RtoW(真实世界,鼠标到世界转换),lpi(线平面相交测试)和非项目。
这已经很久了,因为我不得不做任何矩阵/矢量数学,并且经过长时间的努力使这些书变得很难。
该网站可能会变慢,我的互联网连接并不是那么好。如果证明有麻烦,我会将代码复制到这里。
感谢任何可能有帮助的帮助或链接。
答案 0 :(得分:1)
你有正确的想法,但我看到两个错误和一个不必要的并发症:
mm
。或者,确保矩阵堆栈位于正确的位置,并unproject
使用mvMatrix
。这样可以避免错误。RtoW
中)。这是一个错误,因为翻译已包含在mm
中;你要么加倍要么取消它。取消投影鼠标坐标后,您有世界坐标,在进行光线碰撞测试之前无需进一步修改。invert(view)*invert(projection)
或(更便宜)invert(projection*view)
,但您目前正在执行invert(projection*invert(view))
,这是错误的。这些是我的意思,但我没有审查你的所有代码。当我将其与my own version of the same进行比较时,无效投影看起来不错。