一、OpenGL 渲染架构

1、传递到顶点着色器的数据 Attributes
顶点数据
投影矩阵、模型矩阵
纹理坐标(图片映射坐标)-> 最终传递到片元着色器
2、统一变量 Uniforms
可在任意着色器访问,可以理解为全局常量
尽量少改动,频繁改动的建议使用 Attributes 传递
通向顶点着色器、片元着色器的通道
变换矩阵、颜色值、时间戳
3、Texture Data 纹理数据
可以传向顶点着色器、片元着色器
但是传递给顶点着色器没有意义
二、投影
正投影:显示 2D 图形
透视投影:3D 图形(远小近大)
三、固定着色器(存储着色器)
// GLShaderManager 着色器管理类的初始化
GLShaderManager shaderManager;
shaderManager.InitializeStockShaders();
调用固定着色器方法
-UserStockShader(...)
| 着色器 | 使⽤用场景 |
|---|---|
| 单元着色器 | 所有片元用同一种颜色填充 |
| 平面着色器 | 可以应用变换 (模型、投影变化) |
| 上色着色器 | 可以应用变换 (模型、投影变化),顶点间插入的颜色变化更平滑 |
| 默认光源着色器 | 使绘制的图形产生阴影和光照效果,平行光源(太阳光) |
| 点光源着色器 | 使绘制的图形产生阴影和光照效果,平行光源(电光源) |
| 纹理替换矩阵着色器 | 从纹理提取对应颜色直接替换 |
| 纹理调整着色器 | 从纹理提取对应颜色,与基本色混合后填充 |
| 纹理光源着色器 | 将一个纹理通过漫反射照明计算进行调整(相乘)。 |
四、OpenGL 7种基本图元
| 图元 | 使⽤用场景 | 图形 |
|---|---|---|
| GL_POINTS | 每个顶点在屏幕上都是单独点 | |
| GL_LINES | 每一对顶点定义一个线段 | ![]() |
| GL_LINE_STRIP | 一个从第一个顶点依次经过每一个后续顶点⽽绘制的线条 | ![]() |
| GL_LINE_LOOP | 和 GL_LINE_STRIP 相同,但是最后一个顶点和第一个顶点连接起来了 | ![]() |
| GL_TRIANGLES | 每3个顶点定义⼀一个新的三⻆角形 | ![]() |
| GL_TRIANGLE_STRIP | 共⽤用一个条带(strip)上的顶点的一组三角形 | ![]() |
| GL_TRIANGLE_FAN | 以⼀个圆点为中⼼呈扇形排列,共⽤相邻顶点的一组三角形 | ![]() |
五、OpenGL 三角形
三角形环绕方式:
逆时针是正三角,顺时针叫背面三角
⚠️可交换逆时针和顺时针指代的内容,但是不建议修改
三角形带:更少的顶点,节省大量的程序代码和数据空间,且速度更快。

三角形扇:需要绘制相连的三角形






