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:需要处理的纹理单元

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JeffersonGO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值