OpenGL-六-固定管线下面的着色器

固定管线有一个类GLShaderManager 的初始化

GLShaderManager shaderManager;
shaderManager.InitializeStockShaders();

固定管线下面的着色器

在固定管线里面 那些是 属性(Attrubutes) 那些是Uniforms 那些是纹理数据呢?在固定管线里面我们不用管这些,它都帮我们封装好了,我们只需要传参数就行。

单元着色器
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 颜色
使用场景:在绘制图形时, 可以应用变换(模型/投影变化),平移、旋转、缩放的时候,仿射变换,模型视图变化。

要想让你的图形发生变化,你得拿到矩阵才是最终的结果。

通过一个入口把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 模型的4*4矩阵
参数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 模型的4*4矩阵
参数3 投影的4*4矩阵
参数4 点光源的位置   x,y,z 不需要w,光不需要缩放矩阵
参数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 的纹理.将颜⾊与纹理进行颜⾊混合后才填充到⽚段中.

现在有一个黑白纹理,现在要和红色、蓝色进行混合,这时候用到了纹理调整着色器,它的颜色计算,就是 2种颜色混合,最终而得,需要遵循一个方程式的规则。

纹理光源着色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);
参数1 存储着色器种类----纹理光源着色器
参数2 模型的4*4矩阵
参数3 投影的4*4矩阵
参数4 点光源的位置
参数5 颜⾊值(⼏何图形的基本色)
参数6 纹理单元

使⽤场景: 在绘制图形时, 可以应用变换(模型/投影变化)这种着色器通过给定的模型视图投影矩阵. 着⾊器将⼀个纹理通过漫反射照明计算进⾏调整(相乘).

下⾯的归类合理的是: [ CD ]
A 顶点着色器,片元着色器,细分着⾊器,纹理替换矩阵着⾊器(不是)
B 平⾯着⾊器,单元着⾊器,顶点着⾊器(不是),点光源着⾊器
C 顶点着⾊器,片元着⾊器,细分着⾊器 ------>属于可编程管线下的着⾊器
D 单元着色器,默认光源着⾊器,平面着⾊器,纹理光源着⾊器 ------>属于固定管线下的着⾊器

你可能感兴趣的:(OpenGL-六-固定管线下面的着色器)