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

相关推荐
Highcharts.js7 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
头发还在的女程序员8 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
爱写代码的小朋友11 小时前
从零开始学 Win32 API:C++ 窗口编程实战(VS Code + MinGW-w64 命令行详解)
开发语言·c++
果汁华11 小时前
Function Calling 与 Python 实战完整指南
开发语言·网络·python
小小晓.11 小时前
C++:语句和作用域
开发语言·c++
wanderist.12 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
海天鹰13 小时前
PHP上传文件
android·开发语言·php
Yeauty14 小时前
渲染成图再 CLI 拼接,还是进程内直推?Rust 帧到视频的两条路
开发语言·rust·音视频
geovindu15 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
库克克15 小时前
【C++】set 与multiset
开发语言·c++