美文网首页OpenGL初探
第五节—OpenGL中的存储着色器/固定管线

第五节—OpenGL中的存储着色器/固定管线

作者: L_Ares | 来源:发表于2020-04-30 15:57 被阅读0次

    本文为L_Ares个人写作,包括图片皆为个人亲自操作,以任何形式转载请表明原文出处。

    一、存储着色器/固定管线的初始化

    
    GLShaderManager shaderManager;
    shaderManager.InitializeStockShaders();
    
    

    二、存储着色器/固定管线的种类

    当使用固定管线的时候,不需要考虑第四节中的三条通道,也就是说不需要考虑数据需要经过Attributes、Uniforms、TextureData中的哪个进行传递。

    1. 单元着色器

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

    参数1:存储着色器种类——单元着色器
    参数2:颜色值

    使用场景:

    会议默认OpenGL坐标系(-1,1)下的图形,并且图形的所有片段都以同一种颜色填充。

    2. 平面着色器

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

    参数1:存储着色器种类——平面着色器
    参数2:允许变化的4*4矩阵
    参数3:颜色

    使用场景:

    需要使用矩阵进行图形变换的时候(模型、投影变换)。

    3. 上色着色器

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

    参数1:存储着色器种类——上色着色器
    参数2:允许变化的4*4矩阵

    使用场景:

    需要使用矩阵进行图形变换的时候(模型、投影变换)。

    区别:

    上色着色器和平面着色器的使用场景非常的相像,他们的唯一区别是:
    对每一个像素点的颜色填充方式不同。上色着色器是平滑的填充。虽然在上色着色器里面没有接收颜色值的参数,但是可以通过其他的工具类进行颜色的设置。

    4. 默认光源着色器

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

    参数1:存储着色器种类——默认光源着色器
    参数2:模型4*4矩阵
    参数3:投影4*4矩阵
    参数4:颜色值

    使用场景:

    在绘制图形时。可以应用变换(模型、投影变换)。默认光源着色器会使绘制的的图形产生阴影和光照效果。

    5. 点光源着色器

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

    参数1:存储着色器种类——点光源着色器
    参数2:模型4*4矩阵
    参数3:投影4*4矩阵
    参数4:点光源的位置坐标(x,y,z)
    参数5:颜色值(漫反射)

    使用场景:

    在绘制图形时,可以应用变换(模型、投影变换)。点光源着色器也可以使绘制的图形产生阴影和光照效果。它和默认光源着色器的区别是:点光源的位置是可以指定的。默认光源着色器的光源位置坐标是:(0,0,0,1)

    6. 纹理替换矩阵着色器

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

    参数1:存储着色器种类——纹理替换矩阵着色器
    参数2:模型4*4矩阵
    参数3:纹理单元

    使用场景:

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

    7. 纹理调整着色器

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

    参数1:存储着色器种类——纹理调整着色器
    参数2:模型4*4矩阵
    参数3:颜色值
    参数4:纹理单元

    使用场景:

    在绘制图形时可以应用变换(模型、投影变换)。这种着色器通过给定的模型视图投影矩阵,着色器将一个基本色乘以一个取自纹理单元nTextureUnit的纹理,将颜色与纹理进行混合后才填充到片段中。
    这个混合必须遵循颜色混合方程式,方程式会在后面的文章中详细的说明。

    8. 纹理光源着色器

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

    参数1:存储着色器种类——纹理光源着色器
    参数2:模型4*4矩阵
    参数3:投影4*4矩阵
    参数4:点光源位置坐标(x,y,z)
    参数5:几何图形的基本颜色
    参数6:纹理单元

    使用场景:

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

    相关文章

      网友评论

        本文标题:第五节—OpenGL中的存储着色器/固定管线

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