你知道固定管线下有哪些存储着色器吗?

在OpenGL 3.0之前,OpenGL包含一个固定功能的管线,它可以在不适用着色器的情况下,处理几何与像素数据。而在3.1版本开始,固定管线从核心模式去掉,因此,现在需要使用着色器来完成工作。那么,固定管线下到底有哪些着色器呢?下面,我们一起来看一看吧。

  • 使用存储着色器,我们不需要关心它的底层是如何实现的,因为它已经帮我们封装好了,直接使用即可。它们有8种,分别是:
    (1)单元着色器
    (2)平面着色器
    (3)上色着色器
    (4)默认光源着色器
    (5)点光源着色器
    (6)纹理替换矩阵
    (7)纹理调整着色器
    (8)纹理光源着色器
    接下来,我们来简单了解下这几种存储着色器着色器,具体的使用会在后续博客中来继续分析。

在这之前,我们先看下怎么定义和初始化存储着色器:

//定义存储着色器
GLShaderMananger shaderMananger;
//初始化存储着色器
shaderMananger.initalizeStockShaders();

1.单元着色器

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

参数1:GLT_SHADER_IDENTITY 存储着色器种类-单元着色器
参数2:颜色

使用场景:绘制默认OpenGL 坐标系(-1,1)下图形,图形所有片段都会以一种颜色填充。

2.平面着色器

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

参数1:GLT_SHADER_FLAT 存储着色器种类-平面着色器
参数2:允许变化的4*4矩阵
参数3:颜色

使用场景:在绘制图形时,可以应用变换(模型/投影变化)。

3.平面着色器

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

参数1:GLT_SHADER_SHADED 存储着色器种类-上色着色器
参数2:允许变化的4*4矩阵

使用场景:在绘制图形时,可以应用变换(模型/投影变化),颜色将会平滑地插入到顶点之间称为平滑着色。

4.默认光源着色器

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

参数1:GLT_SHADER_DEFAULT_LIGHT 存储着色器种类-默认光源着色器
参数2:模型44矩阵
参数3:投影4
4矩阵
参数4:颜色值

使用场景:在绘制图形时,可以应用变换(模型/投影变化),这种着色器会使绘制的图形产生阴影和光照的效果。

5.点光源着色器

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

参数1:GLT_SHADER_DEFAULT_LIGHT_DIEF 存储着色器种类-点光源着色器
参数2:模型44矩阵
参数3:投影4
4矩阵
参数4:点光源位置
参数5:漫反射的颜色值

使用场景:在绘制图形时,可以应用变换(模型/投影变化),这种着色器器会使绘制的图形产⽣阴影和光照的效果。它与默认光源着色器⾮常类似,区别只是光源位置可能是特定的。

6.纹理替换矩阵着色器

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

参数1:GLT_SHADER_TEXTURE_REPLACE 存储着色器种类-纹理替换矩阵着色器
参数2:模型4*4矩阵
参数3:纹理单元

使用场景:在绘制图形时,可以应用变换(模型/投影变化),这种着色器通过给定的模型视图投影矩阵,使⽤纹理单元来进行颜色填充,其中每个像素点的颜色是从纹理中获取。

7.纹理调整着色器

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

参数1:GLT_SHADER_TEXTURE_MODULATE 存储着色器种类-纹理调整着色器
参数2:模型4*4矩阵
参数3:颜色值
参数4:纹理单元

使用场景:在绘制图形时,可以应用变换(模型/投影变化),这种着色器通过给定的模型视图投影矩阵,着色器将一个基本色乘以一个取自纹理单元nTextureUnit的纹理,将颜色与纹理进行颜色混合后才填充到片段中。

8.纹理调整着色器

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

参数1:GLT_SHADER_TEXTURE_MODULATE 存储着色器种类-纹理光源着色器
参数2:模型44矩阵
参数3:投影4
4矩阵
参数4:点光源位置
参数5:颜色值(几何图形的基本色)
参数6:纹理单元

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

  • 喏,以上就是固定管线下的8种存储着色器啦,如果还有什么缺漏的,欢迎留言纠正,谢谢!

后面的博客会用一个Demo简单的使用以上存储着色器,欢迎关注。

你可能感兴趣的:(你知道固定管线下有哪些存储着色器吗?)