在Qt下使用可编程管线编写OpenGL的流程是怎样的呢? 下面演示了Qt下使用可编程管线的基本代码:(绘制三个不同的三角形,并做些旋转变换)
在Qt中,我们从QGLWidget继承,来实现OpenGL的一些绘制,主要实现其中的initializeGL(), paintGL()以及resizeGL()三个方法,基本声明如下:
#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H
#include <QGLWidget>
#include <QGLShaderProgram>
#include <QVector>
#include <QVector3D>
#include <QVector4D>
#include <QMatrix4x4>
#include <QTime>
#include <QTimer>
class MyGLWidget : public QGLWidget
{
Q_OBJECT
public:
explicit MyGLWidget(QGLWidget *parent = 0);
protected:
void initializeGL();
void paintGL();
void resizeGL(int w, int h);
private:
void drawTriangle(const QVector<QVector4D> &colors);
QGLShaderProgram program;
QVector<QVector3D> vertices;
QVector<QVector4D> colors1; //三角的颜色
QVector<QVector4D> colors2;
QVector<QVector4D> colors3;
int mMVPMatrixHandle; //MVP矩阵绑定到Shader中的位置
int mPositionHandle; //Shader中的顶点位置绑定
int mColorHandle; //Shader中颜色uniform变量的绑定位置
QMatrix4x4 mModelMatrix;//模型矩阵
QMatrix4x4 mViewMatrix; //视图矩阵
QMatrix4x4 mProjectionMatrix; //投影矩阵
QMatrix4x4 mMVPMatrix; //MVP矩阵
int frames; //统计帧率
QTime time;
QTimer *timer;
};
#endif // MYGLWIDGET_H
与固定管线不同,变换中所需要的矩阵不再“免费”提供,需要