当前位置: 首页 > 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();
}

欢迎关注我,一起交流!

http://www.dtcms.com/a/172703.html

相关文章:

  • 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
  • SecureCRT 使用指南:安装、设置与高效操作
  • 判断题材持续性
  • 进程的程序替换——exec系列函数的使用
  • 深入浅出数据库规范化的三大范式
  • Redis能保证数据不丢失吗之AOF
  • Red Hat6.4环境下搭建NFS服务器
  • 30天通过软考高项-第十一天
  • 算法中的数学:质数(素数)
  • chili3d笔记11 连接yolo python http.server 跨域请求 flask
  • CRS 16 slot 设备硬件架构