【发布时间】:2011-06-18 16:37:03
【问题描述】:
我正在尝试在 Qt-openGL 中制作应用程序。在这里,我必须根据鼠标点击知道点击的对象。我的想法是存储点(对象在 QWidget 中的区域),并将鼠标单击与这些点匹配。任何人都可以说如何做到这一点吗?或者任何机构都可以显示任何其他方式吗?
【问题讨论】:
我正在尝试在 Qt-openGL 中制作应用程序。在这里,我必须根据鼠标点击知道点击的对象。我的想法是存储点(对象在 QWidget 中的区域),并将鼠标单击与这些点匹配。任何人都可以说如何做到这一点吗?或者任何机构都可以显示任何其他方式吗?
【问题讨论】:
这个问题通常被称为“拣货”。 OpenGL 本身只是绘制东西,没有几何对象管理可言(OpenGL 有对象,但它们就是你通常所说的资源)。
现在实现 OpenGL 拾取的常用方法是在点击位置 (glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth)) 检索深度值并将其取消投影到世界空间 (gluUnProject(...))。这将为您提供点击点的(x,y,z)。
由于您通常会通过将细分结构遍历到单击坐标来管理某些空间细分结构(BSP、Kd 等)中的几何图形,因此您可以通过这种方式检索对象。
另一种方法是将点击后的光线投射到场景中并进行光线/包围体相交测试。
我强烈反对使用旧的 OpenGL 选择机制:使用起来既慢又麻烦。
【讨论】: