OpenGL/OpenGL ES 渲染流程以及固定存储着色器

栏目: 后端 · 发布时间: 6年前

内容简介:正如上图所表示的,管线分为上下2部分,上半部分时客户端,下半部分为服务器端。 服务器端和客户端时功能和运行上都是异步的,它们是各自独立的软件块和硬件块。在可编程管线中,我们能够编码的就是
  • OpenGL 渲染流程图解析

  • OpenGL 固定存储着⾊器理解

OpenGL渲染流程

OpenGL/OpenGL ES 渲染流程以及固定存储着色器

正如上图所表示的,管线分为上下2部分,上半部分时客户端,下半部分为服务器端。 服务器端和客户端时功能和运行上都是异步的,它们是各自独立的软件块和硬件块。

在可编程管线中,我们能够编码的就是 Vertex Shader (顶点着色器) 和 Fragment Shader (片元着色器),这也是渲染过程中,必备的2个着色器。

Vertex Shader 处理从客户端输入的数据、应用变换、进行其他的类型的数学运算来计算光照效果、位移、颜色值等。为了渲染共有3个顶点的三角形, Vertex Shader 将执行3次,也就是为了每个顶点执行一次。

图中的 Primitive Assembly 说明3个顶点已经组合在一起,而三角形也已经逐个片段的进行了光栅化。每个片段通过执行 Fragment Shader 进行填充。 Fragment Shader 会输出我们将屏幕上看到的最终颜色值。

  • 属性:就是一个对每个顶点都要作改变的数据元素。实际上,顶点位置本身就是一个属性。属性可以是浮点数、整数或布尔数据。

  • Uniform值:通常设置 Uniform 变量就紧接着发出渲染一个图元批次的命令。可以无限制的使用。设置一个应用于整个表面的单个颜色值,还可以设置一个时间值。可以是浮点数、整数或布尔数据。

  • 纹理数据: Vertex ShaderFragment Shader 都可以对纹理值进行采样和筛选。纹理数据的作用并不仅仅是表现图形(后期详解)。

  • 输出:输出数据是作为一个阶段着色器的输出定义的,而在后续阶段的着色器则是作为输入(in)定义的。输出类型的数据可以简单地从一个阶段传递到下一个阶段,也可以以不同的方式插入。客户端代码接触不到的变量。

3种想OpenGL着色器传递渲染数据的方法:

1、属性

2、Uniform值

2、纹理

注意点: Attributes 不能够直接传递给 Fragment Shader ,如果需要传递给 Fragment Shader ,则需要通过 Vertex Shader 间接的传递过去。而 UnifromTexture Data 可以直接传递给 Vertex ShaderFragment Shader 具体怎么传递,依需求而定。

固定存储着色器的分类

存储着色器的使用

GLShaderManager的初始化

// GLShaderManager初始化
GLShaderManager shaderManager;
shaderManager.InitializeStockShaders();
复制代码

单位(Identity)着色器

GLShaderManager::UseStockShader(GLT_SHADER_IDENTITY, GLfloat vColor[4]);
复制代码

单位着色器:只是简单地使用默认笛卡尔坐标系(范围-1.0~1.0)。所有的片段都应用同一种颜色,几何图形为实心和未渲染的。

参数1:存储着色器种类 - 单元着色器

参数2:颜色

平面(Flat)着色器

GLShaderManager::UseStockShader(GLT_SHADER_FLAT, FLfloat mvp[16], GLfloat vColor[4]);
复制代码

平面着色器:将统一着色器进行了扩展,允许为几何图形变换指定一个4x4变换矩阵。在绘制时,可以应用变换(模型/投影变化)。

参数1:存储着色器种类 - 平面着色器

参数2:允许变化的4x4矩阵

参数3:颜色

上色(Shaded)着色器

GLShaderManager::UseStockShader(GLT_SHADER_SHADED, GLfloat mvp[16]);
复制代码

上色着色器:这种着色器唯一的 uniform 值就是在几何图形种应用的变换矩阵。 GLT_ATTRIBUTE_VERTEX (顶点分量)和 GLT_ATTRIBUTE_COLOR (颜色分量)在这种着色器中都会使用。颜色值将被平滑地插入顶点之间(称为平滑着色)。

参数1:存储着色器种类 - 上色着色器

参数2:允许变化的4x4矩阵

默认光源着色器

GLShaderManager::UseStockShader(GLT_SHADER_DEFAULT_LIGHT, FLfloat mvMatrix[16],GLfloat pMatrix[16], GLfloat vColor[4]);
复制代码

默认光源着色器:使对象产生阴影和光照的效果。需要设置存储着色器的 GLT_ATTRIBUTE_VERTEX (顶点分量)和 GLT_ATTRIBUTE_NORMAL (表面法线)。

参数1:存储着色器种类 - 默认光源着色器

参数2:模型4x4矩阵

参数3:投影4x4矩阵

参数4:颜色

点光源着色器

GLShaderManager::UseStockShader(GLT_SHADER_POINT_LIGHT_DIFF, FLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3], GLfloat vColor[4]);
复制代码

点光源着色器:点光源着色器和默认光源着色器很相似,但是光源位置可能是特定的。同样需要设置存储着色器的 GLT_ATTRIBUTE_VERTEX (顶点分量)和 GLT_ATTRIBUTE_NORMAL (表面法线)。

参数1:存储着色器种类 - 点光源着色器

参数2:模型4x4矩阵

参数3:投影4x4矩阵

参数4:点光源的位置

参数5:颜色

纹理替换矩阵着色器

GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfloat mvpMatrix[16], GLint nTextureUnit);
复制代码

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

纹理调整着色器

GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_MODULATE, GLfloat mvpMatrix[16], GLfloat vColor, GLint nTextureUnit);
复制代码

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

参数1:存储着色器种类 - 纹理调整着色器

参数2:模型4x4矩阵

参数3:颜色值

参数4:纹理单元

纹理光源着色器

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

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

参数1:存储着色器种类 - 纹理光源着色器

参数2:模型4x4矩阵

参数3:投影4x4矩阵

参数4:点光源位置

参数5:颜色值(几何图形的基本色)

参数6:纹理单元


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Probabilistic Method Second Edition

The Probabilistic Method Second Edition

Noga Alon、Joel H. Spencer / Wiley-Blackwell / 2000 / $121.95

The leading reference on probabilistic methods in combinatorics-now expanded and updated When it was first published in 1991, The Probabilistic Method became instantly the standard reference on one......一起来看看 《The Probabilistic Method Second Edition》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具