前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt5.12+OpenGL可编程管线之创建OpenGL窗口

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

作者头像
用户5908113
发布2020-01-02 17:24:10
6470
发布2020-01-02 17:24:10
举报
文章被收录于专栏:Pou光明Pou光明

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

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

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

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

.h部分:

代码语言:javascript
复制
#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部分:

代码语言:javascript
复制
#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开始学习的,大家可以一起交流!

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pou光明 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档