美文网首页OpenGLOpenGL+MetalOpenGL
OpenGL(四): 存储着色器

OpenGL(四): 存储着色器

作者: 慕_風 | 来源:发表于2019-05-19 20:30 被阅读5次

    OpenGL存储着色器

    在OpenGL 3.0 之前,OpenGL包含固定功能的管线,这些固定管线(或者叫存储着色器)可以用来处理光照、坐标变换、裁剪等。但由于OpenGL的使用实际使用场景丰富而多变,固定管线无法自定义的缺点被大多数开发者所诟病,所以后来加入了可编程管线,让开发者可以使用GLSL自定义管线。下面我们就来了解一下OpenGL中的这个固定管线(存储着色器)。

    • 单元着色器

      使用场景:

      ​ 绘制默认OpenGL坐标系(-1, 1)下的图形,图形所有片段都以一种颜色填充。

      使用方式:

      GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY, GLfloat vColor[4]);
      

      参数说明:

      参数 说明
      GLT_SHADER_IDENTITY 存储着色器种类-单元着色器
      vColor[4] 有4个元素的一维数组,表示RGBA颜色
    • 平面着色器

      使用场景:

      ​ 在绘制图形是,可以应用变换(模型/投影变化)。

      使用方式:

      GLShaderManager::UserStockShader(GLT_SHADER_FLAT, GLfloat mvp[16], GLfloat vColor[4]);
      

      参数说明:

      参数 说明
      GLT_SHADER_FLAT 存储着色器种类-平面着色器
      mvp[16] 有16个元素的一维数组,表示允许变化的4x4矩阵
      vColor[4] 有4个元素的一维数组,表示RGBA颜色
    • 上色着色器

      使用场景:

      ​ 在绘制图形时,可以应用变换(模型/投影变化) 颜色将会平滑地插入到顶点之间称为平滑着色。

      使用方式:

      GLShaderManager::UserStockShader(GLT_SHADER_SHADED, GLfloat mvp[16]);
      

      参数说明:

      参数 说明
      GLT_SHADER_SHADED 存储着色器种类-上色着色器
      mvp[16] 有16个元素的一维数组,表示允许变化的4x4矩阵
    • 默认光源着色器

      使用场景:

      ​ 在绘制图形时,可以应用变换(模型/投影变化) 这种着色器会时绘制的图形产生阴影和光照效果。

      使用方式:

      GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT, GLfloat mvMatrix[16], GLfloat pMatrix[16], GLfloat vColor[4]);
      

      参数说明:

      参数 说明
      GLT_SHADER_DEFAULT_LIGHT 存储着色器种类-默认光源着色器
      mvMatrix[16] 有16个元素的一维数组,表示模型的4x4矩阵
      pMatrix[16] 有16个元素的一维数组,表示投影的4x4矩阵
      vColor[4] 有4个元素的一维数组,表示RGBA颜色
    • 点光源着色器

      使用场景:

      ​ 在绘制图形时,可以应用变换(模型/投影变化) 这种着色器会使绘制的图形产生阴影和光照的效果。它与默认光源着色器非常类似,区别只是光源位置可能是特定的。

      使用方式:

      GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF, GLfloat mvMatrix[16], GLfloat pMatrix[16], GLfloat vLightPos[3], GLfloat vColor[4]);
      

      参数说明:

      参数 说明
      GLT_SHADER_POINT_LIGHT_DIEF 存储着色器种类-点光源着色器
      mvMatrix[16] 有16个元素的一维数组,表示模型的4x4矩阵
      pMatrix[16] 有16个元素的一维数组,表示投影的4x4矩阵
      vLightPos[3] 有3个元素的一维数组,表示光源的坐标
      vColor[4] 有4个元素的一维数组,表示RGBA颜色
    • 纹理替换矩阵着色器

      使用场景:

      ​ 在绘制图形时,可以应用变换(模型/投影变化) 这种着色器通过给定的模型视图投影矩阵,使用纹理单元来进行颜色填充。其中每个像素点的颜色是从纹理中获取的。

      使用方式:

      GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfloat mvMatrix[16], GLint nTextureUnit);   
      

      参数说明:

      参数 说明
      GLT_SHADER_TEXTURE_REPLACE 存储着色器种类-纹理替换矩阵着色器
      mvMatrix[16] 有16个元素的一维数组,表示模型的4x4矩阵
      nTextureUnit 纹理单元
    • 纹理调整着色器

      使用场景:

      ​ 在绘制图形时,可以应用变换(模型/投影变化) 这种着色器通过给定的模型投影矩阵,着色器将一个基本色乘以一个取自纹理单元nTextureUnit的纹理,将颜色与纹理进行颜色混合后才填充到片段中。

      使用方式:

      GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE, GLfloat mvMatrix[16], GLfloat vColor[4], GLint nTexturnUnit);   
      

      参数说明:

      参数 说明
      GLT_SHADER_TEXTURE_MODULATE 存储着色器种类-纹理调整着色器
      mvMatrix[16] 有16个元素的一维数组,表示模型的4x4矩阵
      vColor[4] 有4个元素的一维数组,表示RGBA颜色
      nTextureUnit 纹理单元
    • 纹理光源着色器

      使用场景:

      ​ 在绘制图形时,可以应用变换(模型/投影变化) 这种着色器通过给定的模型视图投影矩阵,着色器将一个纹理通过漫反射照明计算进行调整(相乘)。

      使用方式:

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

      参数说明:

      参数 说明
      GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF 存储着色器种类-纹理光源着色器
      mvMatrix[16] 有16个元素的一维数组,表示模型的4x4矩阵
      pMatrix[16] 有16个元素的一维数组,表示投影的4x4矩阵
      vLightPos[3] 有3个元素的一维数组,表示光源的坐标
      vBaseColor[4] 有4个元素的一维数组,表示颜色值(几何图形的基本色)
      nTextureUnit 纹理单元

    相关文章

      网友评论

        本文标题:OpenGL(四): 存储着色器

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