我在哪里点击OpenGL?

时间:2011-07-25 12:18:51

标签: xcode opengl 3d mouse

我在Xcode / OpenGL中编程,并在我的视图中显示了一些3d对象。 有没有办法在OpenGL中检索我点击的3D位置/顶点/面?

2 个答案:

答案 0 :(得分:3)

通常的方法是调用gluUnProject两次,在两种情况下使用x和y坐标,znear在一个中,而zfar在另一种情况下。

这为你提供了射线的两个点。您的鼠标点击该光线。

现在碰撞对象(第一个边界体积,然后每个三角形,如果需要,或参数化,如果可能)与该光线相撞。最接近的是您想要的。

另一种可能性是回读z缓冲区值(glReadPixels)。这应该用一个像素缓冲区对象来完成,并分散在几个帧上(或者它将是你管道上非常讨厌的失速)。这将为您提供一个3D坐标,您可以找到最近的对象。

或者,您可以使用遮挡查询(重新绘制禁用了颜色写入的1x1视口)以获得相同的效果。

最后,当然有selection mode,但这是不推荐使用的功能,因此您可能不想使用它。

答案 1 :(得分:2)

如果你可以使用在较新的opengl版本中弃用的东西,那么另一种方法就是使用拣选缓冲区/选择模式:http://www.lighthouse3d.com/opengl/picking/