【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调整大小(或首次显示)时调用

相关推荐
景庆197几秒前
vscode启动springBoot项目配置,激活环境
java·开发语言·vscode
幽络源小助理2 分钟前
PHP网站统计系统源码下载_极简统计程序支持宝塔部署_幽络源
开发语言·php
小智社群4 分钟前
获取贝壳中介列表,并且自动导入excel
开发语言·javascript·ecmascript
特种加菲猫4 分钟前
C++ 容器适配器揭秘:stack, queue 和 priority_queue 的模拟实现
开发语言·c++
筱璦9 分钟前
C#期货分仓、策略交易模拟演示系统(含资源下载)
开发语言·c#·策略模式·量化交易·期货交易
froginwe1111 分钟前
Highcharts 测量图:全面解析与优化实践
开发语言
雪芽蓝域zzs14 分钟前
uni-app x 使用 UTS 语言使用 mixins
开发语言·javascript·uni-app
DaqunChen29 分钟前
全栈开发的演变:从LAMP到MEAN再到现代JavaScript
开发语言·javascript·ecmascript
Fate_I_C34 分钟前
Kotlin 特有语法糖
android·开发语言·kotlin
xh didida34 分钟前
C++ --list接口使用及实现
开发语言·c++·list