欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 文化 > OpenGl实战笔记(1)基于qt5.15.2+mingw64+opengl绘制三角形

OpenGl实战笔记(1)基于qt5.15.2+mingw64+opengl绘制三角形

2025/5/7 17:07:21 来源:https://blog.csdn.net/oTianLe1234/article/details/147714293  浏览:    关键词:OpenGl实战笔记(1)基于qt5.15.2+mingw64+opengl绘制三角形

一、实现效果
在这里插入图片描述
二、实现原理
(1)各函数作用与原理

  • initialize()
    作用: 初始化 OpenGL 函数(initializeOpenGLFunctions()) 设置背景清除颜色为 rgba(0.2, 0.3, 0.4, 1.0)。
    原理: initializeOpenGLFunctions() 是 Qt 提供的,用于初始化当前 OpenGL 上下文下的函数指针(比如 glGenBuffers, glCreateShader 等)。glClearColor(…) 设置了在清屏时使用的颜色。
  • resize(int w, int h)
    作用:设置视口大小为窗口的宽高。配置正交投影矩阵(gluOrtho2D),即二维坐标系统,范围为:X ∈ [-1, 1],Y ∈ [-1, 1]。重设模型视图矩阵模式。
    原理:glViewport(…) 定义了渲染区域。glMatrixMode(…) + glLoadIdentity() + gluOrtho2D(…) 设置投影矩阵,相当于告诉 OpenGL“怎么看这个世界”。模型视图矩阵(GL_MODELVIEW)用于定义模型和视图的变换。
  • render()
    作用:清空颜色缓冲区。加载单位矩阵,重置模型变换。开始绘制三角形,每个顶点使用不同颜色。
    原理:glClear(…) 擦除屏幕。glLoadIdentity() 重置当前矩阵为单位矩阵。glBegin(…) … glEnd() 指定绘制图元(此处是一个带有颜色插值的三角形)。

(2)调用顺序(Qt 中 QOpenGLWidget 的典型流程)

  • 程序启动时或第一次显示:Qt 自动调用 initialize() → 设置 OpenGL 状态。
  • 窗口大小变化或首次显示:Qt 调用 resize(width, height) → 设置视口和投影。
  • 每一帧或重绘请求时:Qt 调用 render() → 执行绘图操作。

三、参考代码

//GeometryRenderer 渲染类
#pragma once
#include "rendermoduleinterface.h"
#include <QOpenGLFunctions>
class GeometryRenderer : public RenderModuleInterface, protected QOpenGLFunctions
{
public:void initialize() override;void resize(int w, int h) override;void render() override;
};#include "geometryrenderer.h"
#include <GL/glu.h>
void GeometryRenderer::initialize()
{initializeOpenGLFunctions();glClearColor(0.2f, 0.3f, 0.4f, 1.0f);
}
void GeometryRenderer::resize(int w, int h)
{glViewport(0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-1, 1, -1, 1);glMatrixMode(GL_MODELVIEW);
}
void GeometryRenderer::render()
{glClear(GL_COLOR_BUFFER_BIT);glLoadIdentity();glBegin(GL_TRIANGLES);glColor3f(1.0, 0.0, 0.0); glVertex2f(0.0, 0.5);glColor3f(0.0, 1.0, 0.0); glVertex2f(-0.5, -0.5);glColor3f(0.0, 0.0, 1.0); glVertex2f(0.5, -0.5);glEnd();
}

欢迎关注我,一起交流!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词