Qt OpenGL-如何基于鼠标单击获得对象

问题描述

|| 我正在尝试在Qt-openGL中创建一个应用程序。在这里,我必须基于鼠标单击来了解单击的对象。我的想法是存储点(在QWidget中对象的区域),然后将鼠标单击与这些点匹配。有人可以说该怎么做吗?或者有人可以以其他方式表现出来吗?     

解决方法

        此问题通常称为“拣选”。 OpenGL本身只是画图,没有几何对象管理可言(OpenGL有对象,但是它们是您通常所说的资源)。 目前,实现OpenGL拾取的通常方法是在点击位置(
glReadPixels(x,y,1,GL_DEPTH_COMPONENT,GL_FLOAT,&depth)
)处获取深度值,然后将其解投影到世界空间(
gluUnProject(...)
)中。这使您获得点击点的
(x,z)
。 由于通常会通过将细分结构遍历到单击坐标来管理某些空间细分结构(BSP,Kd等)中的几何,因此可以通过这种方式检索对象。 另一种方法是将光线跟随单击投射到场景中,并进行光线/边界体积相交测试。 我强烈不鼓励使用旧的OpenGL选择机制:使用起来缓慢且麻烦。