【Qt之OpenGL】01创建OpenGL窗口

1.创建子类继承QOpenGLWidget

2.重写三个虚函数

C++ 复制代码
/** 设置OpenGL的资源和状态,最先调用且调用一次
 * @brief initializeGL
 */
virtual void initializeGL() override;
/** 设置OpenGL视口、投影等,当widget调整大小(或首次显示)时调用
 * @brief resizeGL
 * @param w
 * @param h
*/
virtual void resizeGL(int w, int h) override;
/** 渲染OpenGL窗口,当窗口widget需要更新时调用
 * @brief paintGL
 */
virtual void paintGL() override;
     


void CreateOpenGLWindow::initializeGL()
{
    //设置清空屏幕的颜色,黑色
    QOpenGLFunctions *f = context()->functions();
    f->glClearColor(0.f,0.f,0.f,0.f);
}

void CreateOpenGLWindow::resizeGL(int w, int h)
{
    //设置视口大小,与窗口一样
    QOpenGLFunctions *f = context()->functions();
    f->glViewport(0,0,w,h);
}

void CreateOpenGLWindow::paintGL()
{
    // 每次重绘之前清空屏幕颜色和深度缓冲
    QOpenGLFunctions *f = context()->functions();
    f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}

initializeGL:

设置OpenGL的资源和状态,最先调用且调用一次

paintGL:

渲染OpenGL窗口,当窗口widget需要更新时调用。

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

若需要从paintGL()以外的位置触发重新绘制(e.g. 使用计时器设置场景动画),则应调用widget的**update()**函数来安排更新。

resizeGL:

设置OpenGL视口、投影等,当widget调整大小(或首次显示)时调用

相关推荐
Brilliantwxx12 分钟前
【C++】深度剖析 · 继承 (虚基表+虚函数表)
开发语言·c++
砍材农夫13 分钟前
物联网 基于netty构建mqtt协议规范(发布/订阅模式)
java·开发语言·物联网·netty
techdashen14 分钟前
Rust 泛型 vs Java 泛型:它们看起来相似,但骨子里截然不同
java·开发语言·rust
一只旭宝18 分钟前
【C加加入门精讲15】:IO流缓冲区、字符串流、缓冲流及STL vector容器零基础实战教程一、博客前言
开发语言·c++
在坚持一下我可没意见29 分钟前
Python 修仙修炼录 08:字典秘境,参悟键值玄机
开发语言·笔记·python·入门·字典
luck_bor32 分钟前
Map&Stream流
java·开发语言
阿文的代码库33 分钟前
如何在C++中使用标准库的智能指针
开发语言·c++·算法
yujunl36 分钟前
U9客开Demo代码中的错误
开发语言
郝学胜-神的一滴36 分钟前
Qt 高级开发 008: 使用QSetting记住上次打开路径
开发语言·c++·qt·开源软件
_洋38 分钟前
Three.js 着色器相关方法总结
开发语言·javascript·着色器