opengl的管线概述

   在opengl的管线如下所示:

                   读取顶点数据—>执行顶点着色器—>图元装配—>光栅化图元—>执行片段着色器—>逐片段操作—>帧缓冲区操作

    1.读取顶点数据。通过glDrawArrays.glDrawElements指定图元的顶点。

    2.执行顶点着色器。在着色器中逐个顶点的操作,在这个阶段能做的工作则是:

        1. 顶点变换:根据模型视图和投影矩阵变换

        2.光照计算和法线变换(法线矩阵 是模型矩阵的左上角3*3的逆矩阵)和法线规格化

        3. 纹理坐标变换.(纹理矩阵)

        4.材质状态:纹理坐标生成

这个阶段接受到的是每个顶点的原始数据,输出的则是变换后的顶点数据。

     3.图元组装。在这个阶段顶点数据已经确定,根据图元规则,比如GL_POINTS 、GL_TRIANGLES 等将顶点组装成图元。此外对每个图元及其对应的顶点执行裁剪(如果是透视投影,需要用透视矩阵做数学运算,关键是得到W的值),透视除法,视口变换。 这里面的知识点有很多,我会在以后的文章里面仔细讲解。

      4.光栅化图元。在顶点变换和图元裁剪之后,光栅化管线取得单独图元(如三角形,线段,点),并为该图元生成对应的片段,每个片段直接映射到屏幕上的像素,结果一个片段就对应一个像素。然而,并不总是这样的,在超高分辨率的设备上,可能使用教大的片段,一个片段对应几个像素,以减少GPU的工作负荷。

     5.执行片段着色器。在该阶段主要的任务是指定一个片段的颜色和深度值。分为以下几种情况:

           1.纹理颜色。通过纹理坐标从采样器里面获取相对应的颜色。

           2.雾化颜色。通过片段与当前视点位置计算雾化的颜色。

           3.颜色汇总..这个与混合完全不同概念.将纹理,主定义的颜色,雾化的颜色,光照颜色阶段计算的颜色 汇总一起.

         除了上面的三点之外,还可以执行两个不是设置片段颜色的功能:剪切平面(glScissor) ,Alpha测试(glAlphaFunc)

      6.逐片段操作。该阶段发生在片段着色器之后,片段着色器的输出是颜色和深度值,在逐片段操作阶段会执行一系列的操作,可以应用到帧缓冲区中。这一系列的操作如下:

           1.裁剪区域测试(指定只有一个矩形区域内的像素可以被修改)

           2.模板缓冲区测试

           3.深度缓冲区测试

           4.多重采样 

           5.混合

           6.抖动

    7.帧缓冲区操作。 在真正渲染到界面之前,渲染内容会先被渲染到缓冲区中。系统提供一个默认的缓冲区,但是要实现一些特殊的效果,使用默认的缓冲区无法实现,所以,我们需要创建另外一个缓冲区,在这个缓冲区中绘制纹理,然后再把这个纹理绘制到默认的缓冲区中,然后在屏幕上会显示出这个默认的缓冲区。

猜你喜欢

转载自my.oschina.net/u/1273706/blog/746989