NO.7 - OpenGL渲染架构

2020-07-08  本文已影响0人  z夜流星

1.OpenGL的渲染架构

OpenGL的渲染架构
渲染流程:

1.设置顶点数据和其他参数。
2.在顶点着色器中进行运算得到裁剪坐标。
3.细分着色器、几何着色器,不可自定义,跳过。
4.图元设置,根据设置构成点、线、三角形。
5.裁剪,裁剪掉超出显示区域的部分。
6.光栅化, 将图源栅格化为一个个的像素点。
7.片元着色器,将对应的栅格(像素)填充为具体的颜色。
8.渲染图像。

数据传递的三种通道

Attributes

Uniform

Texture Data

2.基本图元

基本图元
基本图元说明
OpenGL三⻆形环绕⽅式

在默认情况下,OpenGL认为具有逆时针⽅向环绕的多边形为正⾯。

GL_CW:顺时针环绕的多边形为正⾯
GL_CCW:逆时针环绕的多边形为正⾯
glFrontFace(GL_CW);

3. 存储着⾊器

3.1 初始化
// GLShaderManager 的初始化
GLShaderManager shaderManager;
shaderManager.InitializeStockShaders();
3.1不同的存储着⾊器

单元着色器

GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY, 
                               GLfloat vColor[4]);

参数1: 存储着⾊器种类-单元着⾊器
参数2: 颜⾊值
使⽤场景:绘制默认OpenGL 坐标系(-1,1)下图形。 图形所有片段都会以⼀种颜⾊填充

平⾯着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_FLAT,
                                 GLfloat mvp[16],
                                 GLfloat vColor[4]);

参数1: 存储着⾊器种类-平⾯着⾊器
参数2: 允许变化的4*4矩阵
参数3: 颜⾊色值
使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。

上色着色器

GLShaderManager::UserStockShader(GLT_SHADER_SHADED,
                                 GLfloat mvp[16]);

参数1: 存储着⾊器种类-上⾊着⾊器
参数2: 允许变化的4*4矩阵
使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。颜色将会平滑地插入到顶点之间,称为平滑着色

默认光源着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,
                                 GLfloat mvMatrix[16],
                                 GLfloat pMatrix[16],
                                 GLfloat vColor[4]);

参数1: 存储着⾊器种类-默认光源着⾊器
参数2: 模型44矩阵
参数3: 投影4
4矩阵
参数4: 颜⾊值
使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器会使绘制的图形产生阴影和光照的效果。

点光源着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,
                                 GLfloat mvMatrix[16],
                                 GLfloat pMatrix[16],
                                 GLfloat vLightPos[3],
                                 GLfloat vColor[4]);

参数1: 存储着⾊器种类-点光源着⾊器
参数2: 模型44矩阵
参数3: 投影4
4矩阵
参数4: 点光源的位置
参数5: 漫反射颜⾊值
使⽤场景:在绘制图形时, 可以应用变换(模型/投影变化)。这种着⾊器会使绘制的图形产⽣阴影和光照的效果。它与默认光源着⾊器⾮常类似,区别只是光源位置可能是特定的

纹理替换矩阵着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,
                                 GLfloat mvMatrix[16],
                                 GLint nTextureUnit);

参数1: 存储着⾊器种类-纹理替换矩阵着⾊器
参数2: 模型4*4矩阵
参数3: 纹理单元
使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器通过给定的模型视图投影矩阵,使⽤纹理单元来进⾏颜⾊填充。其中每个像素点的颜⾊是从纹理中获取。

纹理调整着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,
                                 GLfloat mvMatrix[16],
                                 GLfloat vColor[4],
                                 GLint nTextureUnit);

参数1: 存储着⾊器种类-纹理调整着⾊器
参数2: 模型4*4矩阵
参数3: 颜⾊值
参数4: 纹理单元
使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器通过给定的模型视图投影矩阵。着⾊器将⼀个基本⾊乘以⼀个取⾃纹理单元nTextureUnit 的纹理,将颜⾊与纹理进⾏颜⾊混合后才填充到⽚段中。

纹理光源着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,
                                 GLfloat mvMatrix[16],
                                 GLfloat pMatrix[16],
                                 GLfloat vLightPos[3],
                                 GLfloat vBaseColor[4],
                                 GLint nTextureUnit);

参数1: 存储着⾊器种类-纹理光源着⾊器
参数2: 模型44矩阵
参数3: 投影4
4矩阵
参数4: 点光源位置
参数5: 颜⾊值
参数6: 纹理单元
使⽤用场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器通过给定的模型视图投影矩阵,着⾊器将⼀个纹理通过漫反射照明计算进⾏调整(相乘)。

上一篇 下一篇

猜你喜欢

热点阅读