OpenGL(七)——Qt 中编写OpenGL
一、说明
前面介绍了一些OpenGL的绘图的文章,都是在vs2010上编写的,有时候Qt项目中会用到,但是Qt自己有自己的OpenGL库。
OpenGL(四)——第一个OpenGL程序——创建一个四边形
二、Qt中使用OpenGL
在之前的文章中写了怎么在vs中去配置OpenGL,比如:
是在Qt 中调用外部的dll相关的库,比如,使用glut库,配置glut库的方法。
OpenGL(一)——Win10+VS2010+OpenGL配置
是在VS2010中去配置OpenGL的方法。
三、Qt中Qt封装好的OpenGL
在Qt之前的版本中OpenGL是单独作为一个模块来使用的,在Qt Creator中工程pro文件中需要添加Qt += opengl 模块。
主要是使用两个类QGLWidget和QOpenGLWidget,QGLWidget类是用于呈现OpenGL图形的小部件。QGLWidget提供了显示集成到Qt应用程序中的OpenGL图形的功能。它很容易使用。继承它并使用子类,就像其他任何QWidget一样,额外的可以选择使用QPainter和标准OpenGL渲染命令。
从Qt5.4开始,Qt推荐使用QOpenGLWidget和QOpenGL类。
QGLWidget和QOpenGLWidget提供了三个方便的虚拟函数,可以在子类中重写这些函数来执行典型的OpenGL任务:
paintGL():渲染OpenGL场景。每当需要更新小部件时调用。
resizeGL ():设置OpenGL视区、投影等。每当小部件调整了大小时都会调用
该视区(并且当它第一次显示时也会调用,因为所有新创建的小部件都会自动获
得一个调整大小的事件)。
initializeGL():设置OpenGL呈现上下文,定义显示列表等。在第一次调
用resizeGL ()或paintGL ()之前调用一次。
四、示例
制作一个旋转的正方体,如下图所示,参考了NeHe的教程:
具体的代码实现就是继承了QOpenGL类:
class NeHe_6_2_Widget : public QGLWidget
{
Q_OBJECT
public:
NeHe_6_2_Widget(QWidget *parent = 0);
~NeHe_6_2_Widget();
public slots:
void slotTimer();
protected:
void initializeGL(); //是用来初始化这个OpenGL窗口部件的,可以在里面设定一些有关选项.
void paintGL(); //是用来绘制OpenGL的窗口了,只要有更新发生,这个函数就会被调用.
void resizeGL( int width, int height ); //就是用来处理窗口大小变化这一事件的,width和height就是新的大小状态下的宽和高了,另外resizeGL()在处理完后会自动刷新屏幕。
void loadGLTextures(); //在这个函数中我们会载入指定的图片并生成相应当纹理。
GLfloat xRot, yRot, zRot ;
GLuint texture[6];
private:
QTimer* m_timer;
};
下一篇把这个绘制旋转正方体的代码上传。
本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。