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();
}
欢迎关注我,一起交流!