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

Qt OpenGL- How to get the object based on the mouse click

本文关键字:鼠标 对象 OpenGL- 何获得 于鼠标 Qt      更新时间:2023-10-16

我正在尝试在Qt-openGL中制作一个应用程序。在这里,我必须知道点击的对象,基于鼠标点击。我的想法是存储点(QWidget中对象的区域),并将鼠标点击与这些点相匹配。有人能说怎么做吗?,或者任何身体都能以其他方式显示吗?

这个问题通常被称为"拾取"。OpenGL本身只是画东西,没有几何对象管理可言(OpenGL有对象,但它们是你通常称之为资源的东西)。

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

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

另一种方法是将单击后的光线投影到场景中,并进行光线/边界体积相交测试。

我强烈反对使用旧的OpenGL选择机制:它使用起来既慢又麻烦。