美文网首页iOS视觉
五 OpenGL固定存储着色器API解析

五 OpenGL固定存储着色器API解析

作者: 王俏 | 来源:发表于2020-08-04 18:00 被阅读0次

函数原型:

// 初始化

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: 纹理单元

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

相关文章

网友评论

    本文标题:五 OpenGL固定存储着色器API解析

    本文链接:https://www.haomeiwen.com/subject/jbwwrktx.html