在OpenGL 3.1之前,只有一种固定管线着色器,而在3.1之后被启用,取而代之的是可编程管线.
初始化
GLShaderManager shaderManager;
shaderManager.InitializeStockShaders();
设置存储器的类型:
函数原型:GLint UseStockShader(GLT_STOCK_SHADER nShaderID, ...);
类型说明
enum GLT_STOCK_SHADER {
GLT_SHADER_IDENTITY = 0,
GLT_SHADER_FLAT,
GLT_SHADER_SHADED,
GLT_SHADER_DEFAULT_LIGHT,
GLT_SHADER_POINT_LIGHT_DIFF,
GLT_SHADER_TEXTURE_REPLACE,
GLT_SHADER_TEXTURE_MODULATE,
GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF,
GLT_SHADER_TEXTURE_RECT_REPLACE,
GLT_SHADER_LAST
};
1.单位着色器/单元着色器: GLT_SHADER_IDENTITY
在坐标范围为(-1.0, 1.0)内,所有片段都应用同一种颜色。
参数1:着色器类型
参数2:颜色参数
shaderManager.UserStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);
2.平面着色器:GLT_SHADER_FLAT
可以为几何图形变化指定一个44变换矩阵,该矩阵被称为“模型视图投影矩阵”。
参数1:着色器类型
参数2:44变换矩阵
参数3:颜色参数
shaderManager.UserStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],GLfloat vColor[4]);
3.上色着色器:GLT_SHADER_SHADED
将颜色平滑的插入到顶点之间,进行平滑着色。
参数1:着色器类型
参数2:颜色参数
shaderManager.UserStockShader(GLT_SHADER_SHADED,GLfloat vColor[4]);
4.默认光源着色器:GLT_SHADER_DEFAULT_LIGHT
为图形产生阴影和光照效果。
参数1:着色器类型
参数2:模型视图矩阵
参数3:投影矩阵
参数4:颜色参数
shaderManager.UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
5.点光源着色器:GLT_SHADER_POINT_LIGHT_DIFF
为图形产生阴影和光照效果。与默认光源着色器非常类似,区别在与点光源着色器可以指定光源位置。
参数1:着色器类型
参数2:模型视图矩阵
参数3:投影矩阵
参数4:视点坐标光源位置
参数5:颜色参数
shaderManager.UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
6.纹理替换矩阵着色器:GLT_SHADER_TEXTURE_REPLACE
通过给定的模型视图投影矩阵,使用纹理单元来进行填充,其每个像素点的颜色是从纹理中获取。
参数1:着色器类型
参数2:模型视图矩阵
参数3:纹理单元
shaderManager.UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);
7.纹理调整着色器:GLT_SHADER_TEXTURE_MODULATE
通过给定的模型视图投影矩阵,将一个基本色乘以一个取自纹理单元nTextureUnit的纹理,将颜色与纹理进行混合后填充到片段中。
参数1:着色器类型
参数2:模型视图矩阵
参数3:颜色参数
参数4:纹理单元
shaderManager.UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);
8.纹理光源着色器:GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF
通过给定的模型视图投影矩阵,将一个纹理通过漫反射照明计算进行调整(相乘)。
参数1:着色器类型
参数2:模型视图矩阵
参数3:视觉空间中的光源位置
参数4:几何图形的基本色
参数5:需要处理的纹理单元
shaderManager.UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);
GLShaderManager 预定义的标识符
标识符 | 描述 |
---|---|
GLT_ATTRIBUTE_VERTEX | 3分量(x, y, z)顶点位置 |
GLT_ATTRIBUTE_COLOR | 4分量(r, g, b, a)颜色值 |
GLT_ATTRIBUTE_NORMAL | 3分量(x, y, z)表面法线 |
GLT_ATTRIBUTE_TEXTURE0 | 第一对 2 分量(s ,t)纹理坐标 |
GLT_ATTRIBUTE_TEXTURE1 | 第二对 2 分量(s ,t)纹理坐标 |
网友评论