如何在Qt 5.4中使用原生OpenGL?

Dan*_*gel 6 opengl qt

我想使用Qt 5.4来创建一个窗口,并使用普通的OpenGL函数在该窗口中渲染一些东西.在过去的几天里,我读了很多关于Qt类以及如何初始化OpenGL等等.我认为,我必须处理的主要类是QOpenGLWindow或QOpenGLWidget,但也有QSurface和其他一些类.现在我非常不确定接下来要做什么以及我应该使用哪个类来使用普通的OpenGL函数.有人可以更清楚地向我解释我要设置Qt GUI,我可以使用普通的OpenGL吗?

我的其他一些问题是:

  • Qt在这一点上创建了一个简单的OpenGL上下文?我必须使用QOpenGLContext吗?
  • QSurface和QOpenGLWindow之间究竟有什么区别?在QOpenGLWindow示例中,使用了两个类.
  • 除了这个qt之外,是否可以使用glew?这里有一些问题,涉及用qt设置glew,但我认为我没有明白为什么需要glew.

编辑:我和一位同事讨论了这个问题,我们唯一的结论是使用Offscreen-Rendering.有谁知道另一种解决方案?

pep*_*ppe 2

Qt 在什么时候创建一个普通的 OpenGL 上下文?我必须使用 QOpenGLContext 吗?

无论是在记录的地方(例如,创建 aQOpenGLWidget或 aQOpenGLWindow将自动创建上下文),或者您可以随时通过创建QOpenGLContext对象来手动创建上下文。

QSurface 和 QOpenGLWindow 之间到底有什么区别?在 QOpenGLWindow 示例中使用了这两个类。

AQSurface是表示“可绘制表面”(屏幕上或屏幕外)的基类。QWindow是它的屏幕实现(代表顶级窗口),因此它继承自QSurface. QWindow您可以使用 OpenGL 或基于 CPU 的光栅器来绘制。

最后,QOpenGLWindow是一个QWindow子类,它通过自动创建和管理 OpenGL 上下文(通过QOpenGLContext)、具有可选的部分更新策略(通过使用 FBO)等来提供一些额外的功能和便利。

除了这个qt东西之外还可以使用glew吗?这里有一些关于使用 qt 设置 glew 的问题,但我认为我没有明白为什么需要 glew 的真正原因。

Qt 不会妨碍您。而且它不会以任何方式改变您对 OpenGL 的使用。只需使用 Qt 创建一个窗口和一个上下文(以完全跨平台的方式),然后您就可以自由使用 GLEW(解析 OpenGL 函数指针、扩展等)或任何第 3 方 OpenGL 抽象。