四第一个opengl的qt程序

Posted RedWetPlace

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四第一个opengl的qt程序相关的知识,希望对你有一定的参考价值。

原链接

1、QOpenGLWidget:不需要GLFW

QOpenGLWdiget提供了三个便捷的虚函数,可以重载,用来重新实现典型的OpenGL任务:

.panitGL:渲染OpenGL场景。widget需要更新时调用。

.resizeGL:设置OpenGL视口、投影等。widget调整大小(或首次显示)时调用。

.initializeGL:设置OpenGL资源和状态。第一次调用resizeGL()/panitGL()之前调用一次。

 

2、如果需要从panitGL()以外的位置触发重新绘制(典型实例是使用计时器设置场景动画),则应调用widget的update()函数来更新。

 

3、调用paintGL()、resizeGL()或initializeGL()时,widget的OpenGL呈现上下文将变为当前。如果需要从其他位置,(例如,在widget的构造函数或自己的绘制函数中)调用OpenGL API函数,则必须首先调用makeCurrent().

在paintGL()以外的地方调用绘制函数,没有意义。绘制图像最终将被paintGL()覆盖。

 

4、QOpenGLFunctions_x_x_Core:不需要GLAD

.QOpenGLFunction_x_xCore提供OpenGLx.x核心模式的所有功能。是对OpenGL函数的封装:

.initializeOpenGLFunctions:初始化OpenGL函数,将Qt里的函数指针指向显卡的函数。

 

5、例

glClearColor(0.2f,0.3f,0.3f,1.0f); //设置状态

glClear(GL_COLOR_BUFFER_BIT); //使用状态

 

6、新建qt工程,样式设置

QWidget
    background-color:rgb(68,68,68);
    color:rgb(255,255,255);
    font:10pt"幼圆";
    

QMenuBar
    background-color:rgb(200,200,200);
    color:rgb(60,60,60);

7、拖一个QOpenGLWidget空间到ui上

8、新建一个Openwidget类,继承QOpenGLWidge 和 QOpenGLFunctions_3_3_Core

9、重写虚函数 initializeGL() 、 reizeGL(int w,int h)、paintGL()

10、头文件代码

#ifndef OPENGLWIDGET_H
#define OPENGLWIDGET_H

#include <QOpenGLWidget>
#include <QOpenGLFunctions_3_3_Core>

class Openglwidget : public QOpenGLWidget,public QOpenGLFunctions_3_3_Core

    Q_OBJECT
public:
    explicit Openglwidget(QWidget *parent = nullptr);

signals:

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

;

#endif // OPENGLWIDGET_H

11、源文件代码

 

以上是关于四第一个opengl的qt程序的主要内容,如果未能解决你的问题,请参考以下文章

将 Qt GUI 嵌入到现有的 OpenGL 程序中

QT 安装 - OpenGL(无角度)

Qt 使用自带的OpenGL模块开发程序

Qt & OpenGL:如何强制使用 OpenGL 2.1?

OpenGL代码适用于GLFW,但不适用于Qt OpenGL

qt:在一个 gui 窗口中包含 opencv 和 opengl 子窗口