五 OpenGL固定存储着色器API解析
函数原型:
// 初始化
bool InitializeStockShaders(void);
// 获取固定存储着色器
GLuint GetStockShader(GLT_STOCK_SHADER nShaderID);
// 使用着色器
GLint UseStockShader(GLT_STOCK_SHADER nShaderID, ...);
其中GLT_STOCK_SHADER是个枚举:
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
};
- 单元着色器
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4])
vColor: 颜⾊
使⽤场景: 绘制默认OpenGL 坐标系(-1,1)下图形,⽚段都会以一种颜⾊填充
只能绘制一些点,线,三角形,不能进行平移,缩放,旋转等
- 平面着色器
GLShaderManager::UserStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],GLfloat vColor[4]);
mvp: 允许变化的4*4矩阵
vColor: 颜⾊
使⽤场景: 在绘制图形时, 可以应⽤变换(模型/投影变化).
- 上⾊着⾊器
GLShaderManager::UserStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);
mvp: 允许变化的4*4矩阵
使用场景: 在绘制图形时, 可以应用变换(模型/投影变化)
- 默认光源着⾊器
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
mvMatrix: 模型4*4矩阵
pMatrix: 投影4*4矩阵
vColor: 颜⾊色值
使用场景: 在绘制图形时, 可以应用变换(模型/投影变化) 这种着⾊器会使绘制的图形产生 阴影和光照的效果.
- 点光源着⾊器
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);
mvMatrix: 投影4*4矩阵
pMatrix: 点光源的位置
vLightPos: 漫反射颜⾊值
使用场景: 在绘制图形时, 可以应⽤变换(模型/投影变化), 这种着⾊器会使绘制的图形产⽣阴影和光照的效果.它与默认光源着⾊器⾮常类似,区别只是光源位置可能是特定的.
- 纹理替换矩阵着⾊器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);
mvMatrix: 模型4*4矩阵
nTextureUnit: 纹理理单元
使⽤场景: 在绘制图形时,可以应用变换(模型/投影变化)这种着⾊器通过给定的模型视图投影矩阵.使用纹理单元来进行颜⾊填充.其中每个像素点的颜色是从纹理中获取.
- 纹理调整着⾊器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);
mvMatrix: 模型4*4矩阵
vColor: 颜⾊色值
nTextureUnit: 纹理理单元
使⽤场景: 在绘制图形时, 可以应⽤变换(模型/投影变化) 这种着⾊器通过给定的模型视图投影矩阵.着⾊器将一个基本⾊乘以一个取自纹理理单元nTextureUnit 的纹 理.将颜⾊与纹理进⾏颜⾊混合后才填充到⽚段中.
- 纹理光源着⾊器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,G Lfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);
mvMatrix: 模型4*4矩阵
pMatrix: 投影4*4矩阵
vLightPos: 点光源位置
vBaseColor: 颜⾊值(⼏何图形的基本⾊)
nTextureUnit: 纹理单元
使用场景: 在绘制图形时,可以应用变换(模型/投影变化)
这种着⾊器通过给定的模型视图投影矩阵.着⾊器将⼀个纹理通过漫反射照明计算进⾏调整(相乘).