在opengl的管线以下所示:测试
读取顶点数据—>执行顶点着色器—>图元装配—>光栅化图元—>执行片断着色器—>逐片断操做—>帧缓冲区操做ci
1.读取顶点数据。经过glDrawArrays.glDrawElements指定图元的顶点。数学
2.执行顶点着色器。在着色器中逐个顶点的操做,在这个阶段能作的工做则是:模板
1. 顶点变换:根据模型视图和投影矩阵变换渲染
2.光照计算和法线变换(法线矩阵 是模型矩阵的左上角3*3的逆矩阵)和法线规格化sso
3. 纹理坐标变换.(纹理矩阵)数据
4.材质状态:纹理坐标生成opengl
这个阶段接受到的是每一个顶点的原始数据,输出的则是变换后的顶点数据。工作
3.图元组装。在这个阶段顶点数据已经肯定,根据图元规则,好比GL_POINTS 、GL_TRIANGLES 等将顶点组装成图元。此外对每一个图元及其对应的顶点执行裁剪(若是是透视投影,须要用透视矩阵作数学运算,关键是获得W的值),透视除法,视口变换。 这里面的知识点有不少,我会在之后的文章里面仔细讲解。生成
4.光栅化图元。在顶点变换和图元裁剪以后,光栅化管线取得单独图元(如三角形,线段,点),并为该图元生成对应的片断,每一个片断直接映射到屏幕上的像素,结果一个片断就对应一个像素。然而,并不老是这样的,在超高分辨率的设备上,可能使用教大的片断,一个片断对应几个像素,以减小GPU的工做负荷。
5.执行片断着色器。在该阶段主要的任务是指定一个片断的颜色和深度值。分为如下几种状况:
1.纹理颜色。经过纹理坐标从采样器里面获取相对应的颜色。
2.雾化颜色。经过片断与当前视点位置计算雾化的颜色。
3.颜色汇总..这个与混合彻底不一样概念.将纹理,主定义的颜色,雾化的颜色,光照颜色阶段计算的颜色 汇总一块儿.
除了上面的三点以外,还能够执行两个不是设置片断颜色的功能:剪切平面(glScissor) ,Alpha测试(glAlphaFunc)
6.逐片断操做。该阶段发生在片断着色器以后,片断着色器的输出是颜色和深度值,在逐片断操做阶段会执行一系列的操做,能够应用到帧缓冲区中。这一系列的操做以下:
1.裁剪区域测试(指定只有一个矩形区域内的像素能够被修改)
2.模板缓冲区测试
3.深度缓冲区测试
4.多重采样
5.混合
6.抖动
7.帧缓冲区操做。 在真正渲染到界面以前,渲染内容会先被渲染到缓冲区中。系统提供一个默认的缓冲区,可是要实现一些特殊的效果,使用默认的缓冲区没法实现,因此,咱们须要建立另一个缓冲区,在这个缓冲区中绘制纹理,而后再把这个纹理绘制到默认的缓冲区中,而后在屏幕上会显示出这个默认的缓冲区。