美文网首页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(四): 存储着色器

    OpenGL存储着色器 在OpenGL 3.0 之前,OpenGL包含固定功能的管线,这些固定管线(或者叫存储着色...

  • OpenGL ES 入门 — 2.GLSL基础

    在OpenGL 3.0之前,OpenGL 使用的是固定渲染管线,使用存储着色器完成渲染,存储着色器就是写好了着色程...

  • OpenGL 固定管线

    OpenGL固定管线下的存储着色器类型 1.单元着色器 GLShaderManager::UserStockSha...

  • 片段着色器

    OpenGLES可编程管线流程: 一、固定功能片段着色器在OpenGLES 1.1中(固定功能桌面OpenGL),...

  • OpenGL 固定存储器着⾊器理解 第二节(二)

    OpenGL 固定存储器着⾊器理解 Shader整体式封闭的,中间的各道工艺按固定的流程顺序走。 固定管线着色器看...

  • OpenGL_002_OpenGL基础渲染

    OpenGL基础渲染 一、OpenGL 与 着色器 在OpenGL 3.0之前,OpenGL包含一个固定功能的管线...

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

    管线: 在OpenGL 下渲染图形,就会有经历一个一个节点.⽽这样的操作可以理解为管线.大家可以想象成流⽔线.每个...

  • 四、OpenGL的存储着色器

    OpenGL提供了一些能够实现某些渲染功能的固定管线,即存储着色器。这些管线只能拿来直接使用,不支持自定义编程,接...

  • OpenGL固定管线

    固定管线/存储着色器初始化 单元着色器 使用场景:绘制默认OpenGL 坐标系(-1,1)下的图形,图形所有片段都...

  • OpenGL 固定存储器着色器理解

    在OpenGL 3.1之前,只有一种固定管线着色器,而在3.1之后被启用,取而代之的是可编程管线,但是理解固定管线...

网友评论

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

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