三、OpenGL 渲染基础

297 阅读2分钟

一、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 三角形

三角形环绕方式:

逆时针是正三角,顺时针叫背面三角
⚠️可交换逆时针和顺时针指代的内容,但是不建议修改

三角形带:更少的顶点,节省大量的程序代码和数据空间,且速度更快。

三角形带

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