当前位置: 首页 > news >正文

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();
}

欢迎关注我,一起交流!

相关文章:

  • Gradio全解20——Streaming:流式传输的多媒体应用(6)——构建视频流目标检测系统
  • Qt 信号槽机制底层原理学习
  • 安装SDL和FFmpeg
  • 005-nlohmann/json 基础方法-C++开源库108杰
  • 性能测试之性能调优
  • 机器学习朴素贝叶斯算法
  • 0-1背包问题基础概念
  • 家政维修服务平台需求规格说明书
  • 记9(Torch
  • LeetCode 热题 100 17. 电话号码的字母组合
  • SQL常见误区
  • [低代码 + AI] 明道云与 Dify 的三种融合实践方式详解
  • 大模型学习专栏-导航页
  • Python字符串全解析:从基础操作到高级应用的技术指南
  • LeetCode:链表的中间结点
  • Python核心技巧 类与实例:面向对象编程的基石
  • 41.寻找缺失的第一个正数:原地哈希算法详解
  • 开元类双端互动组件部署实战全流程教程(第2部分:控制端协议拆解与机器人逻辑调试)
  • 精益数据分析(41/126):深入解读移动应用商业模式的关键指标与策略
  • Leetcode刷题记录32——搜索二维矩阵 II
  • 山大齐鲁医院通报“子宫肌瘤论文现男性患者”:存在学术不端
  • 贵州省黔西市发生载人游船侧翻事故
  • 英伟达:美国无法操纵监管机构在AI领域取胜,美企应专注创新而不是编造荒诞谣言
  • 桥,在黄岩与上海之间|劳动者的书信③
  • 全红婵/陈芋汐夺得跳水世界杯总决赛女子双人10米台冠军
  • 王受文已任中华全国工商业联合会领导班子成员