编辑文章



Ø  Vertex ShaderFragment Shader是可编程管线。

 

Ø  Vertex Array/Buffer objects:顶点数据来源。这时渲染管线的顶点输入。通常使用Buffer objects效率更好。在今天的演示样例中,简单起见。使用的是 Vertex Array。

 

Ø  Vertex Shader顶点着色器通过可编程的方式实现对顶点的操作,如进行坐标空间转换,计算 per-vertexcolor以及纹理坐标;

 

Ø  Primitive Assembly图元装配,经过着色器处理之后的顶点在图片装配阶段被装配为基本图元。OpenGL ES 支持三种基本图元:点。线和三角形。它们是可被 OpenGL ES 渲染的。接着对装配好的图元进行裁剪clip):保留全然在视锥体中的图元,丢弃全然不在视锥体中的图元。对一半在一半不在的图元进行裁剪;接着再对在视锥体中的图元进行剔除处理cull):这个过程可编码来决定是剔除正面。背面还是所有剔除。

 

Ø  Rasterization:光栅化。在光栅化阶段。基本图元被转换为二维的片元(fragment),fragment 表示能够被渲染到屏幕上的像素,它包括位置,颜色。纹理坐标等信息。这些值是由图元的顶点信息进行插值计算得到的。

这些片元接着被送到片元着色器中处理。

这是从顶点数据到可渲染在显示设备上的像素的质变过程。

 

Ø  Fragment Shader:片元着色器通过可编程的方式实现对片元的操作。

在这一阶段它接受光栅化处理之后的fragment,color,深度值。模版值作为输入。

 

Ø  Per-Fragment Operation:在这一阶段对片元着色器输出的每个片元进行一系列測试与处理,从而决定终于用于渲染的像素。


顶点变换和光照(T&L)

在一个物体被绘制到屏幕之前,必须先计算它的光照,而且将它从3D世界转换到屏幕二维坐标系中(这两个过程称为光照和顶点变换,也就是T&L, Transformation & Lighting)。

 

Ø 世界变换

 

世界变换就是将物体顶点坐标从模型空间转换到世界空间。

 

平移变换


旋转变换

 

绕x轴旋转θ角


绕y轴旋转θ角


绕z轴旋转θ角


缩放变换


Ø  观察变换

 

以摄像机位置为參考原点,摄像机观察的方向为坐标轴,建立的坐标系称为观察坐标系

 

Ø  投影变换

 

将三维物体投影到二维表面上。即投影到虚拟摄像机的胶片上,这个过程就是投影变换。

以胶片中心为參考原点的空间坐标系称为投影坐标系,物体在投影坐标系中的坐标称为投影坐标

 

Ø 视区变换

 

物体在投影坐标系中的表示为浮点坐标。通过定义屏幕显示区域(一般为显示窗体大小)。将浮点坐标转化为像素坐标的过程称为视区变换,该像素坐标值称为屏幕坐标。比如,假设定义社区大小为宽640像素,高480像素,那么投影坐标(1.0f,05.f)经过社区变换屏幕坐标为(640,240),假设定义视区大小为宽1024像素,高800像素,经过社区变换屏幕坐标为(1024。400)。


Ø  顶点着色器(VertexShader)


Ø  Attributes:使用顶点数组封装每一个顶点的数据。一般用于每一个顶点都各不同样的变量。如顶点位置、颜色等。

 

Ø  Uniforms:顶点着色器使用的常量数据,不能被着色器改动。一般用于对同一组顶点组成的单个3D物体中全部顶点都同样的变量,如当前光源的位置。

 

Ø  Samplers:这个是可选的,一种特殊的uniforms,表示顶点着色器使用的纹理。

 

Ø  Shader program:顶点着色器的源代码或可运行文件。描写叙述了将对顶点运行的操作。

 

Ø Varying:varying 变量用于存储顶点着色器的输出数据。当然也存储片元着色器的输入数据,varying 变量终于会在光栅化处理阶段被线性插值。顶点着色器假设声明了varying 变量。它必须被传递到片元着色器中才干进一步传递到下一阶段。因此顶点着色器中声明的varying 变量都应在片元着色器中又一次声明同名同类型的 varying 变量。OpenGL ES 2.0 也规定了全部实现应该支持的最大 varying 变量个数不能少于 8 个。


图元装配


顶点着色器之后,渲染流水线的下一个阶段是图元装配,图元是一个能用opengl es画图命令绘制的几何体,画图命令指定了一组顶点属性。描写叙述了图元的几何形状和图元类型。顶点着色器使用这些顶点属性计算顶点的位置、颜色以及纹理坐标,这样才干传到片元着色器。在图元装配阶段,这些着色器处理过的顶点被组装到一个个独立的几何图元中。比如三角形、线、点精灵。对于每一个图元,必须确定它是否位于视椎体内(3维空间显示在屏幕上的可见区域),假设图元部分在视椎体中,须要进行裁剪,假设图元所有在视椎体外,则直接丢弃图元。

裁剪之后,顶点位置转换成了屏幕坐标。背面剔除操作也会运行,它依据图元是正面还是背面。假设是背面则丢弃该图元。经过裁剪和背面剔除操作后。就进入渲染流水线的下一个阶段:光栅化。



 光栅化和像素处理


光栅化阶段把图元转换成片元集合,之后会提交给片元着色器处理,这些片元集合表示能够被绘制到屏幕的像素。

例如以下图所看到的:



Ø 片元着色器(FragmentShader)


片元着色器对片元实现了一种通用的可编程方法。它对光栅化阶段产生的每一个片元进行操作

Ø  Varying variables:顶点着色器输出的varying变量经过光栅化插值计算后产生的作用于每一个片元的值。

 

Ø  Uniforms:片元着色器使用的常量数据

 

Ø  Samplers:一种特殊的uniforms。表示片元着色器使用的纹理。

 

Ø  Shader program:片元着色器的源代码或可运行文件,描写叙述了将对片元I运行的操作。





原文地址:https://www.cnblogs.com/blfbuaa/p/6789941.html