采摘射线与模型矩阵无关。如果场景中的物体移动(即模型矩阵发生变化),则射线本身不会移动。
您打算在链接中提出的方法之间使用哪种方法? GL_SELECTION,用特殊颜色渲染,自制的十字路口?
我将修改这个答案相应
编辑:让我们去自制一个然后
首先,你需要生成一个光线。你通常想要在世界空间中表达它(即“我的光线始于与我的相机相同的位置,其目标是(xyz))。有两种方法可以做到这一点,这些方法在openGL Faq一种方法来生成拾取光线......另一种方法......)只需复制'n粘贴代码
如果鼠标位于屏幕中间,则应该让光线指向相同的方向你可以检查你的参数gluLookAt
现在,你想要做的是相交你的射线与你的网格的三角形,但你有一个问题,因为三角形不是相同的表达系统比射线。
所以你必须在三角形的系统中表达射线。
三角形系统:模型系统;射线系统:世界体系。幸运的是,您有一个从模型到世界的矩阵(模型矩阵,您在glPushMatrix之后设置的矩阵)。所以inverse(ModelMatrix)是从世界到矩阵的矩阵。
ray = Ray(cam_pos, dir);
foreach (mesh)
ModelMatrix = whatever you want
InverseModelMatrix = inverse(ModelMatrix)
rayInModelSpace = Ray(InverseModelMatrix x ray.pos, InverseModelMatrix x ray.dir)
Intersect(rayInModelSpace, mesh)
你相交方法看起来是这样的:
foreach (triangle in mesh)
if ray.intersect(triangle) return true
三角线相交的代码可以在geometrictools.com
这将是相当缓慢的发现,但它会奏效。有几种方法可以提高性能,但最简单的方法是计算每个网格的AABB,并首先将该射线与AABB相交。不与AABB交叉=>不与网格相交
代码也可以在geometrytools上找到。
我会离开几天,这么好运:)
谢谢回答^^我试图做家庭由模型视图矩阵的逆变换它使一个。所以ModelView矩阵意味着什么,我想 – rano 2010-09-13 19:01:21
谢谢你这真的有帮助,并确认我在想什么,很高兴听到我学习了OpenGL的一些东西,尽管我仍然是一个小菜鸟。而且这个链接也非常有用。 – rano 2010-09-15 18:48:11