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

标签 c++ windows qt opengl

我正在尝试在 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/

相关文章:

c++ - shared_ptr 的 vector ,从函数返回并修改它

c++ - 如何检查下标运算符是否存在?

html - 不需要的脚本被添加到所有浏览器的所有 HTML 页面

c++ - Qt 5 : CONFIG+=c++11 vs QMAKE_CXXFLAGS+=-std=c++11 (What's better)

c++ - 如何在qt Creator中使用Sprite Sheet Animation?

c++ - Qt Quick 如何创建一个按钮,该按钮将锁定为每个 OS 应用程序所使用的原生按钮?

c++ - STL - 将值添加到存储在 STL 映射中的 vector

C++ 静态类成员 - 语法错误

c# - 处理点击ListView的子项

python - 在 Windows 上用 Python 进行文学编程的最佳方法是什么?