我正在尝试在 Qt-openGL 中创建一个应用程序。在这里,我必须根据鼠标点击知道被点击的对象。我的想法是存储点(对象在 QWidget 中的区域),并将鼠标点击与这些点相匹配。任何人都可以说出如何做到这一点吗?或者任何人都可以展示任何其他方式吗?
最佳答案
这个问题通常被称为“挑选”。 OpenGL 本身只是绘制东西,没有几何对象管理可言(OpenGL 有对象,但它们就是您通常所说的资源)。
目前实现 OpenGL 拾取的常用方法是在点击位置检索深度值 (glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth)
) 并将其取消投影到世界空间 (gluUnProject(...)
)。这将为您提供点击点的 (x,y,z)
。
由于您通常会通过将 segmentation 结构遍历到点击坐标来管理某些空间 segmentation 结构(BSP、Kd 等)中的几何图形,因此您可以通过这种方式检索对象。
另一种方法是将点击后的光线转换到场景中,并进行光线/包围体相交测试。
我强烈反对使用旧的 OpenGL 选择机制:使用起来既慢又麻烦。
关于c++ - Qt OpenGL-如何根据鼠标点击获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6397379/