一、基础图形管线
渲染管线(Graphics Pipeline)是将原始图形数据途径一个输送管道,期间经过各种变化处理最终出现在屏幕的过程。下图便是图形显示在屏幕的过程。
渲染管线OpenGL渲染管线的简化版本,如下图所示。
渲染管线简化板1、客户端-服务器
管线分成上半部分客户端与下半部分服务器。客户端存储在CPU存储器中,在主系统内存的驱动程序中执行。驱动程序将渲染命令与数据组合起来,并发送到服务器执行。服务器实际是指图形加速卡上的硬件和内存。客户端和服务器在功能上是异步的,服务器在执行缓冲区中由客户端发送过来的命令和数据组合的时候,客户端同时在准备发送下一个渲染命令与数据组合。
2、着色器
OpenGL在进行绘制的时候,需要指定一个由Shader编译成的着色器程序。通过编译、链接等生成。常见的着色器主要有顶点着色器(VertexShader),片段着色器(FragmentShader)。
2.1、顶点着色器(VertexShader)
用于计算顶点属性的程序。一般用来处理图形每个顶点变换(旋转/平移/投影等),计算光照效果、位移、颜色值等。
2.2、片段着色器(FragmentShader)
用来处理每个像素点的颜色计算和填充,每个像素都会执行一次片元着色器,并且是并行的(大量的计算需要GPU)。
当然我们必须首先为这些着色器提供数据,否则什么也做不成。有3种向OpenGL着色器传递渲染数据的方法,即属性(Attributes),Uniform值和纹理(Texture Data)。
3、着色器传递渲染数据的方法
3.1、属性
所谓属性就是对每一个顶点都要作改变的数据元素。属性值可以是浮点数、整数或布尔数据。属性包括顶点空间位置、纹理坐标、颜色值和用于光照计算的表面法线。这些属性只供顶点着色器使用,对于片段着色器没什么意义。
3.2、Uniform
Uniform是一种对于整个批次的属性都取统一值的单个值,类似Const,是不改变的。设置完Uniform变量就紧接着发出渲染一个图元批次的命令。可以无次数限制地使用,可以设置应用于整个表面的单个颜色值,最常见的应用是在顶点渲染中设置变换矩阵。顶点着色器和片段着色器都可以使用Uniform变量。
3.3、纹理
纹理可以理解为图片(位图),位图就是一个像素数组,数组中的每一个像素就代表着图片中的一个点。典型应用为片段着色器从纹理上采样并在一个三角形表面上应用图形。
以上的总结参考了并部分摘抄了以下文章,非常感谢!
1、《OpenGL超级宝典 第5版》
网友评论