在QT中使用OPENGL的步聚

OPENGL初始化:

 

  1. 初始化OpenGL函数 : initializeOpenGLFunctions
  2. 初始化各种flag :  glEnable
  3. 创建各种缓存对象 : VAO,VBO
  4. 创建并链接shader : 
    1. QOpenGLShaderProgram::addShaderFromSourceCode 
    2. QOpenGLShaderProgram::Link
  5. 启用shader :  QOpenGLShaderProgram::bind
  6. 启用缓存 :     m_vao.bind();
  7. 绑定缓存(加载不变的数据):      m_vao.bind();
  8. 绑定shader的缓存数据(告诉OpenGL如何从缓存中读取数据到shader中)
    1. setAttributeBuffer(0, GL_FLOAT, 0, 3, 0);
    2. enableAttributeArray(0);
  9. 释放缓存
  10. 释放shader

OPENGL绘制:

        1.清屏

                 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        2.启用shader

               QOpenGLShaderProgram::bind();

        3.绑定shader的全局数据(例如摄像机变换矩阵,投影矩阵等)

                        


        4.启用缓存()

                    // 绑定本模型需要的顶点缓冲
                    bind();
        5.绑定缓存(VBO)(加载变化的数据)

                    // 绑定本模型需要的顶点缓冲
                    bind();
                    setUsagePattern(QOpenGLBuffer::StaticDraw);
                    allocate(m_vertices, m_vertecesCount * 3 * sizeof(float));

        6.绑定shader的缓存数据(告诉OpenGL如何从缓存中读取数据到shader中)

                        // 针对本模型, 设置如何渲染
                          setAttributeBuffer(0, GL_FLOAT, 0, 3, 0);
                          enableAttributeArray(0);

        7.绘制(使用shader读取缓存中的内容,转换为顶点,然后按照命令基于顶点绘制3D数据)

                        // 绘制模型
                        glDrawArrays(GL_POINTS, 0, m_vertecesCount);


        8.释放缓存

                        release();
        9.释放shader

                QOpenGLShaderProgram::release

1.在qwdiget应用中继承QOpenGLWidget和QOpenGLExtraFunctions
2.在qtquick应用中继承QObject和QOpenGLExtraFunctions
3.重载void initializeGL(),void paintGL()还有void resizeGL(int w, int h)
4. 在initializeGL中初始化绘制条件

5.在void paintGL()函数中进行绘制

你可能感兴趣的:(QT编程,opengl)