OpenGL初探

第五节—OpenGL中的存储着色器/固定管线

2020-04-30  本文已影响0人  L_Ares

本文为L_Ares个人写作,包括图片皆为个人亲自操作,以任何形式转载请表明原文出处。

一、存储着色器/固定管线的初始化


GLShaderManager shaderManager;
shaderManager.InitializeStockShaders();

二、存储着色器/固定管线的种类

当使用固定管线的时候,不需要考虑第四节中的三条通道,也就是说不需要考虑数据需要经过Attributes、Uniforms、TextureData中的哪个进行传递。

1. 单元着色器


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

参数1:存储着色器种类——单元着色器
参数2:颜色值

使用场景:

会议默认OpenGL坐标系(-1,1)下的图形,并且图形的所有片段都以同一种颜色填充。

2. 平面着色器


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

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

使用场景:

需要使用矩阵进行图形变换的时候(模型、投影变换)。

3. 上色着色器


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

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

使用场景:

需要使用矩阵进行图形变换的时候(模型、投影变换)。

区别:

上色着色器和平面着色器的使用场景非常的相像,他们的唯一区别是:
对每一个像素点的颜色填充方式不同。上色着色器是平滑的填充。虽然在上色着色器里面没有接收颜色值的参数,但是可以通过其他的工具类进行颜色的设置。

4. 默认光源着色器


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

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

使用场景:

在绘制图形时。可以应用变换(模型、投影变换)。默认光源着色器会使绘制的的图形产生阴影和光照效果。

5. 点光源着色器


GLShaderManager::UseStockShader(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)
参数5:颜色值(漫反射)

使用场景:

在绘制图形时,可以应用变换(模型、投影变换)。点光源着色器也可以使绘制的图形产生阴影和光照效果。它和默认光源着色器的区别是:点光源的位置是可以指定的。默认光源着色器的光源位置坐标是:(0,0,0,1)

6. 纹理替换矩阵着色器


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

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

使用场景:

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

7. 纹理调整着色器


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

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

使用场景:

在绘制图形时可以应用变换(模型、投影变换)。这种着色器通过给定的模型视图投影矩阵,着色器将一个基本色乘以一个取自纹理单元nTextureUnit的纹理,将颜色与纹理进行混合后才填充到片段中。
这个混合必须遵循颜色混合方程式,方程式会在后面的文章中详细的说明。

8. 纹理光源着色器


GLShaderManager::UseStockShader(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:点光源位置坐标(x,y,z)
参数5:几何图形的基本颜色
参数6:纹理单元

使用场景:

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

上一篇 下一篇

猜你喜欢

热点阅读