OpenGL--固定管线存储着色器汇总

OpenGL–固定管线存储着色器汇总

在OpenGL 3.1之前,只有一种固定管线着色器,而在3.1之后被启用,取而代之的是可编程管线,但是理解固定管线着色器,熟悉起渲染流程,对我们图形图像开发是有很大帮助的。而且固定管线是封装好的,不需要考虑渲染中到底是顶点着色器还是片元着色器。只需要传递存储着色器类型、所需的参数即可。当然,OpenGL语法对于存储着色器的调用方法使用了可变参数,不同类型的着色器对应参数个数不同。

下面总结几种常见的固定管线着色器的相关参数及使用。

  • 存储着色器函数:该函数为可变参数函数。
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
};
  • 颜色参数:
GLfloat vColor[] = {1.0,0.0,0.0,1.0f};

1.单位着色器/单元着色器: GLT_SHADER_IDENTITY

  简单使用默认笛卡尔坐标系,坐标范围为(-1.0, 1.0),所有片段都应用同一种颜色。需要设置存储着色器一个属性:GLT_ATTRIBUTE_VERTEX(顶点分量)。
使用方法:

shaderManager.UserStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);

  参数1:着色器类型
  参数2:颜色参数

2.平面着色器:GLT_SHADER_FLAT

  在绘制图形时,可以应用变换(模型/投影变化)。可以为几何图形变化指定一个4*4变换矩阵,该矩阵被称为“模型视图投影矩阵”。
使用方法:

shaderManager.UserStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],GLfloat vColor[4]);

  参数1:着色器类型
  参数2:4*4变换矩阵
  参数3:颜色参数

3.上色着色器:GLT_SHADER_SHADED

  在绘制图形时,可以应用该着色器,将颜色平滑的插入到顶点之间,进行平滑着色。需要设置存储着色器的GLT_ATTRIBUTE_VERTEX(顶点分量) 和 GLT_ATTRIBUTE_COLOR(颜色分量) 2个属性。
使用方法:

shaderManager.UserStockShader(GLT_SHADER_SHADED,GLfloat vColor[4]);

  参数1:着色器类型
  参数2:颜色参数

4.默认光源着色器:GLT_SHADER_DEFAULT_LIGHT

  在绘制图形时,可以应用该着色器,为图形产生阴影和光照效果。需要设置存储着色器的GLT_ATTRIBUTE_VERTEX(顶点分量) 和 GLT_ATTRIBUTE_NORMAL(表面法线)。
使用方法:

shaderManager.UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);

  参数1:着色器类型
  参数2:模型视图矩阵
  参数3:投影矩阵
  参数4:颜色参数

5.点光源着色器:GLT_SHADER_POINT_LIGHT_DIFF

  在绘制图形时,可以应用该着色器,为图形产生阴影和光照效果。与默认光源着色器非常类似,区别在与点光源着色器可以指定光源位置。需要设置存储着色器的GLT_ATTRIBUTE_VERTEX(顶点分量) 和 GLT_ATTRIBUTE_NORMAL(表面法线)。
使用方法:

shaderManager.UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);

  参数1:着色器类型
  参数2:模型视图矩阵
  参数3:投影矩阵
  参数4:视点坐标光源位置
  参数5:颜色参数

6.纹理替换矩阵着色器:GLT_SHADER_TEXTURE_REPLACE

  在绘制图形时,可以应用该着色器,通过给定的模型视图投影矩阵,使用纹理单元来进行填充,其每个像素点的颜色是从纹理中获取。需要设置存储着色器的GLT_ATTRIBUTE_VERTEX(顶点分量) 和 GLT_ATTRIBUTE_NORMAL(表面法线)。
使用方法:

shaderManager.UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);

  参数1:着色器类型
  参数2:模型视图矩阵
  参数3:纹理单元

7.纹理调整着色器:GLT_SHADER_TEXTURE_MODULATE

  在绘制图形时,可以应用该着色器,通过给定的模型视图投影矩阵,将一个基本色乘以一个取自纹理单元nTextureUnit的纹理,将颜色与纹理进行混合后填充到片段中。需要设置存储着色器的GLT_ATTRIBUTE_VERTEX(顶点分量) 和 GLT_ATTRIBUTE_TEXTURE0(纹理坐标)。
使用方法:

shaderManager.UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);

  参数1:着色器类型
  参数2:模型视图矩阵
  参数3:颜色参数
  参数4:纹理单元

8.纹理光源着色器:GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF

  在绘制图形时,可以应用该着色器,通过给定的模型视图投影矩阵,将一个纹理通过漫反射照明计算进行调整(相乘)。需要设置存储着色器的GLT_ATTRIBUTE_VERTEX(顶点分量) 和 GLT_ATTRIBUTE_TEXTURE0(纹理坐标)、GLT_ATTRIBUTE_NORMAL(表面法线)。
使用方法:

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

  参数1:着色器类型
  参数2:模型视图矩阵
  参数3:视觉空间中的光源位置
  参数4:几何图形的基本色
  参数5:需要处理的纹理单元

你可能感兴趣的:(OpenGL)