您的位置:首页 > 编程语言

《OpenGL编程指南》读书笔记1—第1章 OpenGL概述

2015-10-18 12:15 344 查看

OpenGL渲染管线

OpenGL首先接收用户提供的几何数据(顶点和几何图元),并且将它输入到一系列着色器阶段中进行处理,包括顶点着色、细分着色(它本身包含两个着色器),以及最后的几何着色,然后它将被送入光栅化单元(rasterizer)。光栅化单元负责对所有剪切区域(clipping region)内的图元生成片元数据,然后对每个生成的片元都执行一个片元着色器。



1 顶点着色

对于绘制命令传输的每个顶点,OpenGL都会调用一个顶点着色器来处理顶点相关的数据。通常来说,一个复杂的应用程序可能包含多个顶点着色器,但是在同一时刻只能有一个顶点着色器起作用。

2细分着色

细分着色会使用Patch来描述一个物体的形状,并且使用相对简单的Patch几何体连接来完成细分的工作,其结果是几何图元的数量增加,并且模型的外观会变得更为平顺。细分着色阶段会用到两个着色器来分别管理Patch数据并且生成最终的形状。

3几何着色

允许在光栅化之前对每个几何图元做更进一步的处理,例如创建新的图元。

4图元装配

将顶点与相关的结合图元之间组织起来,准备下一步的剪切和光栅化工作。

5剪切

顶点可能会落在视口(viewport)之外——也就是我们可以进行绘制的窗口区域——此时顶点相关的图元会做出改动,以保证相关的像素不会在视口外绘制。这一过程叫做剪切(clipping),它是由OpenGL自动完成的。

6光栅化

剪切之后马上要执行的工作,就是将更新后的图元传递到光栅化单元,生成对应的片元。我们可以将一个片元视为一个“候选的像素”,也就是可以放置在帧缓存中的像素,但是它也可能被最终剔除,不再更新对应的像素位置。

7片元着色

最后一个可以通过编程控制屏幕上显示颜色的阶段,叫做片元着色阶段。在这个阶段中,我们使用着色器来计算片元的最终颜色(尽管在“逐片元的操作“阶段时可能还会改变颜色一次)和它的深度值。在这里会使用纹理映射的方式对顶点处理阶段所计算的颜色值进行补充,还可以丢弃(discard)不应该继续绘制的片元。

8逐片元的操作

在这个阶段会使用深度测试(depth test,或z-buffering)和模板测试(stencil test)的方式来决定一个片元是否可见。

如果一个片元成功地通过了所有激活的测试,那么它就可以被直接绘制到帧缓存中了,它对应的像素的颜色值(也可能包括深度值)会被更新,如果开启了融合(blending)模式,那么片元的颜色会与该像素当前的颜色相叠加,形成一个新的颜色值并写入帧缓存中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: