我正在尝试在 Qt-openGL 中制作应用程序。在这里,我必须根据鼠标单击来了解单击的对象。我的想法是存储点(QWidget 中的对象区域),并将鼠标单击与这些点相匹配。有人能说出如何做到这一点吗?或者任何人都可以展示其他方式吗?
这个问题通常被称为“挑选”。 OpenGL 本身只是绘制东西,没有几何对象管理可言(OpenGL 有对象,但它们就是通常所说的资源)。
目前实现 OpenGL 拾取的常用方法是检索单击位置的深度值(glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth)
)并将其反投影到世界空间(gluUnProject(...)
)。这给你(x,y,z)
单击的点的。
由于您通常会通过遍历细分结构到单击坐标来管理某些空间细分结构(BSP、Kd 等)中的几何图形,因此您可以通过这种方式检索对象。
另一种方法是将点击后的光线投射到场景中并进行光线/包围体相交测试。
我强烈反对使用旧的 OpenGL 选择机制:它使用起来很慢而且很麻烦。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)