OpenGL中固定存储着色器和常见图元解析

2019-05-19  本文已影响0人  盾子

什么是固定管线/存储着⾊器?

在早期的OpenGL版本它封装了很多种着⾊器程序块内置的⼀段包含了光照、坐标变换、裁剪等等诸多功能的固定shader程序,来帮助开发者完成图形的渲染。而开发者只需要传⼊相应的参数就能快速完成图形的渲染。类似于iOS开发会封装很多API,而我们只需要调⽤就可以实现功能,不需要关注底层实现原理。但是由于OpenGL的使⽤场景⾮常丰富,固定管线或存储着⾊器⽆法完成所有业务,这时需要使用可编程管线。

常见的存储着色器:

参数1:单位着色器
参数2:颜色值
GLShaderManager::UseStockShader(GLT_SHADER_IDENTITY, GLfoat vColor[4]);

单元着⾊器只是简单地使用默认的笛卡尔坐标系(坐标范围-1.0~1.0)。所有片段都应用同一种颜色,结合图形为实心和未渲染的。这种着色器只使用一个属性 GLT_ATTRIBUTE_VERTEX。vColor参数包含了要求的颜色。

使用场景:绘制默认OpenGL坐标系(-1,1)下图形,图形所有片段都以一种颜色填充(纯色图形)

参数1:平面着色器
参数2:允许变化的4*4矩阵
参数3:颜色值
GLShaderManager::UseStockShader(GLT_SHADER_FLAT, GLfoat mvp[16], GLfloat vColor[4]);

平面着色器:它将统一着色器进行了拓展。允许为几何图形变换指定一个 4 * 4 变换矩阵。经常被称为“模型视图投影矩阵”

使用场景: 在绘制图形时,可以应用变换(模型/投影变换).

参数1: 存储着色器种类-上色着色器
参数2: 允许变换的4*4矩阵
GLShaderManager::UserStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);

上色着色器:在几何图形中应用的变换矩阵。
需要设置存储着色器的GLT_ATTRIBUTE_VERTEX(顶点分量) 和 GLT_ATTRIBUTE_COLOR(颜色分量) 2个属性。颜色值将被平滑地插入顶点之间(平滑着色)

使用场景: 在绘制图形时,可以应用变换(模型/投影变换),颜色会平滑的插入到顶点之间,成为平滑着色.

参数1:默认光源着色器
参数2:模型视图矩阵
参数3:投影矩阵
参数4:颜色值
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);

默认光源着色器:这种着色器使对象产生阴影和光照的效果。需要模型视图矩阵、投影矩阵和作为基本色的颜色值等 Uniform 值。所需的属性有 GLT_ATTRIBUTE_VERTEX(顶点分量)和 GLT_ATTRIBUTE_NORMAL(表面法线)。

使用场景: 在绘制图形时,可以应用变换(模型/投影变换).这种着色器使绘制的图形产生阴影和光照的效果.

参数1:点光源着色器
参数2:模型视图矩阵
参数3:投影矩阵
参数4:视点坐标系中的光源位置
参数5:颜色值
GLShaderManager::UseStockShader(GLT_SHADER_POINT_LIGHT_DIFF, GLfoat mvMatrix[16], GLfloat pMatrix[16], GLfloat vLightPos[3], GLfloat vColor[4]);

点光源着色器:和默认光源着色器很相似,但光源位置可能是待定的。接受 4 个 Uniform 值,即模型视图矩阵、投影矩阵、视点坐标系中的光源位置和对象的基本漫反射颜色。同样所需的属性有 GLT_ATTRIBUTE_VERTEX(顶点分量)和 GLT_ATTRIBUTE_NORMAL(表面法线)。

使用场景: 在绘制图形时,可以应用变换(模型/投影变换).这种着色器使绘制的图形产生阴影和光照的效果.它与默认光源着色器非常类似,区别在于点光源着色器可以指定光源位置

参数1:纹理替换矩阵着色器
参数2:模型视图矩阵
参数3:纹理单元
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfoat mvMatrix[16], GLint nTextureUnit);

纹理替换矩阵:着色器通过给定的模型视图投影矩阵,使用绑定到 nTextureUnit(纹理单元) 指定的纹理单元的纹理对几何图形进行变换。片段颜色是从纹理样本中直接获取的。所需的属性有 GLT_ATTRIBUTE_VERTEX(顶点分量)和 GLT_ATTRIBUTE_NORMAL(表面法线)。

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

参数1:纹理调整着色器
参数2:模型视图矩阵
参数3:颜色值
参数4:纹理单元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);

纹理调整着色器:这种着色器将一个基本色乘以一个取自纹理单元 nTextureUnit 的纹理。所需的属性有 GLT_ATTRIBUTE_VERTEX(顶点分量)和 GLT_ATTRIBUTE_TEXTURE0(纹理坐标)。

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

参数1:纹理光源着色器
参数2:投影矩阵
参数3:视觉空间中的光源位置
参数4:几何图形的基本色
参数5:将要使用的纹理单元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);

纹理光源着色器:这种着色器将一个纹理通过漫反射照明计算进行调整(相乘),光线在视觉空间中的位置是给定的。这种着色器接受 5 个 Uniform 值,即模型视图矩阵、投影矩阵、视觉空间中的光源位置、几何图形的基本色和将要使用的纹理单元。所需的属性有 GLT_ATTRIBUTE_VERTEX(顶点分量)、GLT_ATTRIBUTE_NORMAL(表面法线)和 GLT_ATTRIBUTE_TEXTURE0(纹理坐标)。

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

OpenGL7种基本图元

上一篇 下一篇

猜你喜欢

热点阅读