【Qt之OpenGL】01创建OpenGL窗口

1.创建子类继承QOpenGLWidget

2.重写三个虚函数

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

在这里插入图片描述

相关推荐

  1. QT+opengl 创建一个六边形

    2024-05-01 04:46:02       76 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-01 04:46:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-01 04:46:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-01 04:46:02       82 阅读
  4. Python语言-面向对象

    2024-05-01 04:46:02       91 阅读

热门阅读

  1. 大话人工智能之训练数据集

    2024-05-01 04:46:02       33 阅读
  2. [Mac软件]Adobe Photoshop 2024 v25.7 中文激活版

    2024-05-01 04:46:02       37 阅读
  3. 同源策略

    2024-05-01 04:46:02       31 阅读
  4. vue3路由跳转传递参数: params传参接收不到?

    2024-05-01 04:46:02       36 阅读
  5. LEFT JOIN 子查询可能引发的误删数据

    2024-05-01 04:46:02       31 阅读
  6. 【数据结构与算法】力扣 20. 有效的括号

    2024-05-01 04:46:02       33 阅读