OpenGL固定管线着色器/存储着色器

在OpenGL核心框架中,并没有提供任何内建渲染管线,在提交一个几何图形进行渲染之前,必须制定一个着色器。目前这些存储着色器由GLTools的C++类GLShaderManager进行管理,这些能够满足通常的渲染的基本要求。而更高级的自定义着色器不在本章讨论的范畴之内,后续会探讨

GLShaderManager的使用

  • 在使用前必须进行初始化
    GLShaderManager shaderManager
    shaderManager.InitializeStockShaders();

Uniform值

  • 要对几何图形渲染,需要为对象递交属性矩阵
  • 想要得到我们期望的结果,必须提供程序的Uniform值绑定到想要使用的着色器程序上
  • GLShaderManager类可以帮我们完成以上工作
  • UseStockShader函数会选择一个存储着色器并提供这个着色器的Uniform值,通过一次函数调用就能完成
    GLShaderManager::UseStockShader(GLT_STOCK_SHADER nShaderID, ...);

注意:在C语言(或者C++语言)中,...表示函数接受一个可变的参数数量

固定着色器

单位着色器

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

注意:

  • OpenGL坐标系范围(-1.0~1.0),所有片段都应用同一种颜色

平面着色器

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

注意:

  • 适合模型视图矩阵,投影矩阵(4 x 4变换矩阵,颜色)

上色着色器

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

注意:

  • 应用在变换矩阵,颜色值被平滑的插入顶点之间(称为平滑着色)(4 x 4变换矩阵,颜色)

默认光源着色器

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

注意:

  • 应用模型视图矩阵,投影矩阵。这种着色器使对象产生阴影和光照的效果(模型4 x 4矩阵,投影4 x 4矩阵,颜色)

点光源着色器

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

注意:

  • 跟默认光源着色器类似。模型视图矩阵,投影矩阵,视点坐标系中的光源位置和对象的基本漫反射颜色

纹理替换矩阵着色器

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

注意:

  • 模型视图投影矩阵,使用绑定到nTextureUnit指定的纹理单元的纹理对几何图形进行变换(模型4 x 4矩阵,纹理单元)

纹理调整着色器

GLShaderManager::UseStockShader(GLT_SHADER_c_MODULATE, GLfloat mvMatrix[16],GLfloat vColor,GLint nTextureUnit);

注意:

  • 将一个基本色乘以一个取自纹理单元nTextureUnit的纹理(模型4 x 4矩阵,颜色,纹理单元)

纹理光源着色器

GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF, GLfloat mvMatrix,GLfloat pMatrix[16],GLfloat vLightPos[3],GLFloat vBaseColor[4],GLint nTextureUnit);

注意:

  • 应用变换矩阵(模型,投影),这种着色器将一个通过慢反射照明计算进行调整(相乘),光线在视觉空间中的位置给定的(模型视图矩阵,投影矩阵,视觉空间中的光源位置,几何图形的基本色和将要使用的纹理单元)

你可能感兴趣的:(OpenGL固定管线着色器/存储着色器)