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

相关推荐
lzx_00217 分钟前
C++11(一)
开发语言·c++·算法
未来之窗软件服务37 分钟前
计算机二级[英文]-C 字符串移动—东方仙盟
c语言·开发语言·仙盟创梦ide·东方仙盟
Wang's Blog39 分钟前
Java框架快速入门: Spring Security+OAuth2之过滤器与过滤器链
java·开发语言·spring
谢尔登1 小时前
01_Java基础速通
java·开发语言
前端炒粉1 小时前
DOM 常用 API 速查表
开发语言·javascript·ecmascript
en.en..2 小时前
C语言核心解析:#define与typedef本质区别
开发语言·c++·算法
2601_966949652 小时前
批量获取多只股票五档盘口的极简方案:QuantDash Python SDK 实战指南
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
点心的游戏开发世界3 小时前
GDScript 入门笔记:目录
开发语言·笔记·游戏引擎·godot
洋不写bug3 小时前
二叉树(二) 常见基础操作解析|结点数、树高、查找结点、判断完全二叉树
java·开发语言·数据结构·完全二叉树·二叉树结点数·树高·查找结点
果果燕3 小时前
实习笔记(六)主机按钮状态上报完整流程
开发语言·c++·php