文章目录
关于Qt5 OpenGL教程系列
本系列教程假定你
- 有Qt框架的基础知识。至少了解信号与槽,知道如何创建简单的程序。如果你对文章的内容有任何不明白、需要我阐明的地方,请评论留言。
- 对OpenGL有基础的了解。
需要明确的是本系列教程不是OpenGL教程或者Qt教程,而是这两种技术结合使用的教程
QOpenGLWindow
我们将使用Qt5 新增的QOpenGLWindow类。
QOpenGLWindow是只从QtGui 继承而来的新类。这一点非常重要,因为这使得我们不依赖QtWidgets模块就能提供OpenGL的抽象层。这不像之前QGL的情况,因为QGL和 Qt Widgets过于耦合。
对于QOpenGLWindow我们只需要关注一下几个函数:
- initializeGL()
- resizeGL(int widthint height)
- paintGL()
由函数名称你便可猜出,这几个函数是我们可以操作我们的OpenGL逻辑。其实这就是所有我们所需要去创建简单的OpenGL程序的步骤 —— 这中间很多复杂的配置OpenGL的操作都已经被Qt框架所完成了。
QOpenGLFunctions
为了方便我们可以继承QOpenGLWindow的同时选择性的继承QOpenGLFunctions。在新版的Qt中,GLEW已经不需要了,QOpenGLFunctions就能使得我们可以使用 OpenGL的函数了
你不需要继承QOpenGLFunctions来访问相关函数,但如果你非要,你可以通过QOpenGLContext来获取可用的函数.可以通过如下局部变量的方式来获取:
QOpenGLFunctions functions(QOpenGLContext::currentContext());
functions.glFunctionHere();
// or...
QOpenGLFunctions *functions = QOpenGLContext::currentContext()->functions();
functions->glFunctionHere();
这里所默认访问的是OpenGL ES 2.0 的API,这是处于兼容性考虑的,如此我们可以轻松的将产品移植到嵌入式平台(比如Android).我们接下来的用力都会使用这样的函数上下文(context).我们仍然可以要求使用指定的函数上下文(context)(比如QOpenGLFunctions_4_3_Core)
这样我们可以只访问我们所需要支持的上下文.我们目前没有访问OpenGL ES 2.0 API之外的需求,所以接下去都按照默认的来进行.
创建一个Window
有了以上的基础,我们来创建我们的OpenGL窗口.得益于Qt,跨平台的OpenG