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

pra*_*ran 5 c++ windows opengl qt

我想在Qt-openGL中创建一个应用程序.在这里,我必须根据鼠标点击知道点击的对象.我的想法是存储点(QWidget中的对象区域),并将鼠标点击与这些点匹配.任何人都可以说如何做到这一点?或者任何身体能否以任何其他方式展示?

dat*_*olf 14

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

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

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

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

我强烈反对使用旧的OpenGL选择机制:使用缓慢而繁琐.