Qt5.12+OpenGL可编程管线之创建OpenGL窗口

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,可以点个在看,让它可以帮助到更多老铁~

今天正式进入Qt5.12 + OpenGL 3.x以上可编程管线的代码部分。

程序主要是参考learnopengl,更多关于OpenGL的说明也可参考他们的文章。

https://learnopengl-cn.github.io/01%20Getting%20started/03%20Hello%20Window/

 

由于顶点着色器与片段着色器程序需要我们自己去实现,反而创建窗体的程序就比较少了。

 

 

.h部分:

#include <QOpenGLWidget>
#include <QOpenGLExtraFunctions>


class MyGLWidget : public QOpenGLWidget, protected QOpenGLExtraFunctions
{
    Q_OBJECT


public:
    MyGLWidget(QWidget *parent = nullptr);


    ~MyGLWidget();


protected:
    virtual void initializeGL();
    virtual void resizeGL(int w, int h);
    virtual void paintGL();


    void keyPressEvent( QKeyEvent *e );
};

.cpp部分:

#include <QKeyEvent>


MyGLWidget::MyGLWidget(QWidget *parent)
    : QOpenGLWidget(parent)
{
//    setGeometry( 0, 0, 800, 600 );
    resize(800, 600);
    setWindowTitle( "A goose's OpenGL Framework" );
}


MyGLWidget::~MyGLWidget()
{


}


void MyGLWidget::initializeGL()
{
    //要在调用任何gl函数前调用该函数!!
    this->initializeOpenGLFunctions();
}


//改变窗口大小时调用
void MyGLWidget::resizeGL(int w, int h)
{
    //开始渲染前,必须告诉OpenGL渲染窗口的尺寸大小,即视口(Viewport),
    //这样OpenGL才只能知道怎样根据窗口大小显示数据和坐标
    glViewport(0, 0, w, h);
    qDebug() << "w h" << w << h;
}




//每一帧绘制的函数
void MyGLWidget::paintGL()
{
glClearColor(0.2f, 0.3f, 0.3f, 1.0f); //清空屏幕所用的颜色,参数分别为红、绿、蓝以及透明度
                                     //使用三种颜色的分量可配置出超过1600万种不同的颜色
    glClear(GL_COLOR_BUFFER_BIT);        //清空屏幕的颜色缓冲
}


void MyGLWidget::keyPressEvent(QKeyEvent *e)
{
    //ESC 按下后,关闭窗体
    switch ( e->key() )
    {
    case Qt::Key_Escape:
      close();
        break;
    }
}

程序效果:

小结:涉及到图形学编程,尤其是之前从未接触过的,入门还是有一定难度。我也是从0开始学习的,大家可以一起交流!

     对于程序中 文字解释的排版欢迎大家多提出宝贵的意见,感谢!

最后,如需程序源码可在公众号后台留言

学不可以已

 

发布了91 篇原创文章 · 获赞 94 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/ACK_ACK/article/details/103659139