Article November 30, 2019

OpenGl in Qt-显示三角形

Words count 1k Reading time 1 mins. Read count 0

前言

很多人学习OpenGL,都是使用GLUT来创建小窗体,对于鼠标事件/键盘事件都是通过回调来实现,对于现代OpenGL来说,对着色器程序的创建和链接,这些工作都可以使用Qt框架来做,或者Qt其实已经帮我们封装好了类,我们不用重复造轮子(况且造的轮子还一样),其实可以省掉很多时间。

基础类

QOpenGLWidget

QOpenGLWidget是继承于QWidget,而QWidget是很多Qt中可视化控件的基类,QWidget实现了鼠标事件,键盘事件,重绘事件等,并且都是虚函数,所以子类只需要重载对应的函数即可。所以QOpenGLWidget继承于QWidget,就可以重载很多事件,比如,键盘方向键控制旋转等。
QOpenGLWidget还有三个重要的虚函数:initializeGL、paintGL、resizeGL函数。

initializeGL函数主要准备OpenGL要绘制的数据和初始化一些变量及状态,仅在第一次调用paintGL或resizeGL之前调用。

paintGL函数就是执行绘制的地方,所有的绘制代码都在这里,比如,清屏,画三角形,画贴图,等等。

resizeGL函数是窗口大小变化时会调用的,平时要对它做的操作比较少。

QOpenGLFunctions

QOpenGLFunctions是封装了一个OpenGL ES 2.0 API的类,可以说使用了设计模式里面的适配器模式,通过它,可以使用与原生OpenGL API一致的函数。当然还有其它一些功能,比如查询是否支持某个特效等,不过相对用的比较少。

0%