Qt OpenGL-如何根据鼠标点击获取对象

时间:2011-06-18 16:37:03

标签: c++ windows qt opengl

我正在尝试在Qt-openGL中创建一个应用程序。在这里,我必须根据鼠标点击知道点击的对象。我的想法是存储点(QWidget中的对象区域),并将鼠标点击与这些点匹配。有人可以说怎么做吗?或者任何身体可以用其他方式表示吗?

1 个答案:

答案 0 :(得分:14)

这个问题通常被称为“挑选”。 OpenGL本身只是绘制东西,没有几何对象管理可言(OpenGL有对象,但它们是,你通常称之为资源)。

这些天实现OpenGL选择的常用方法是在点击位置(glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth))检索深度值,并将其取消投影到世界空间(gluUnProject(...))。这会为您提供点击点的(x,y,z)

由于您通常会通过将细分结构遍历到点击坐标来管理某些空间细分结构(BSP,Kd等)中的几何体,因此您可以通过该方式检索对象。

另一种方法是将点击后的光线投射到场景中并进行光线/边界体积相交测试。

我强烈反对使用旧的OpenGL选择机制:使用起来既慢又麻烦。