opengl的管线概述

   在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.帧缓冲区操做。 在真正渲染到界面以前,渲染内容会先被渲染到缓冲区中。系统提供一个默认的缓冲区,可是要实现一些特殊的效果,使用默认的缓冲区没法实现,因此,咱们须要建立另一个缓冲区,在这个缓冲区中绘制纹理,而后再把这个纹理绘制到默认的缓冲区中,而后在屏幕上会显示出这个默认的缓冲区。

相关文章
相关标签/搜索