Qt下使用Shader绘制三角形

在Qt下使用可编程管线编写OpenGL的流程是怎样的呢? 下面演示了Qt下使用可编程管线的基本代码:(绘制三个不同的三角形,并做些旋转变换)

在Qt中,我们从QGLWidget继承,来实现OpenGL的一些绘制,主要实现其中的initializeGL(), paintGL()以及resizeGL()三个方法,基本声明如下:

#ifndef MYGLWIDGET_H
#define MYGLWIDGET_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

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 &colors);

        QGLShaderProgram program;
        QVector vertices;
        QVector colors1; //三角的颜色
        QVector colors2;
        QVector 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
与固定管线不同,变换中所需要的矩阵不再“免费”提供,需要

你可能感兴趣的:(OpenGL)