我在Xcode / OpenGL中编程,并在我的视图中显示了一些3d对象。 有没有办法在OpenGL中检索我点击的3D位置/顶点/面?
答案 0 :(得分:3)
通常的方法是调用gluUnProject
两次,在两种情况下使用x和y坐标,znear在一个中,而zfar在另一种情况下。
这为你提供了射线的两个点。您的鼠标点击该光线。
现在碰撞对象(第一个边界体积,然后每个三角形,如果需要,或参数化,如果可能)与该光线相撞。最接近的是您想要的。
另一种可能性是回读z缓冲区值(glReadPixels
)。这应该用一个像素缓冲区对象来完成,并分散在几个帧上(或者它将是你管道上非常讨厌的失速)。这将为您提供一个3D坐标,您可以找到最近的对象。
或者,您可以使用遮挡查询(重新绘制禁用了颜色写入的1x1视口)以获得相同的效果。
最后,当然有selection mode,但这是不推荐使用的功能,因此您可能不想使用它。
答案 1 :(得分:2)
如果你可以使用在较新的opengl版本中弃用的东西,那么另一种方法就是使用拣选缓冲区/选择模式:http://www.lighthouse3d.com/opengl/picking/