介绍5---OpenGL Pipeline

之前讲述的都是将OpenGL Pipeline当中一个整体来看的,接下去,我们开始探索其内部了。

 

介绍5---OpenGL Pipeline_第1张图片

 

一. 顶点处理

三维空间中的物体,从几何角度来说,是由多个顶点构成的,所以OpenGL Pipeline的第一个步骤就是顶点处理。计算每个顶点的属性,比如这个顶点在当前光照条件下应该是什么颜色的,在当前的视野下应该做的坐标变换等等。在这个步骤,每个顶点都是被独立处理的,不存在相互依赖关系。本阶段的输出还是顶点。

 

二. 图元处理

三维空间中的物体,从几何角度来说,可以分解成点、线段、三角形等,我们称这些基础形状为图元Primitive。在这个阶段,顶点组合成图元,确定这些图元是面向观察者还是背向观察者,如果图元部分在视野范围之外,那要进行相应的裁剪,即去除看不见的顶点,引入新的边界处顶点,组成数个新的图元等等。本阶段的输出是由顶点组成的图元包括点、线段和三角形。

 

三. 光栅化

最终的绘制效果是我们在显示器上看到的一个个像素pixel,所以,我们还需要将图元光栅化,光栅化的结果是多个fragment,fragment和像素在位置上一一对应,只是具有更多的属性。有时候,我们会将Fragment和像素混用。

-点: 根据点的大小,计算出这个点包括哪几个像素

-线: 根据线长和线宽,计算最终屏幕上的哪些像素可以表现出这个线段

-三角形:根据三个顶点,计算被此三角形覆盖的像素

 

对每个被光栅化出来的像素/fragment,根据此像素和顶点的几何关系,将顶点数据进行插值,即得到fragment的诸如位置坐标、颜色等属性的值。例如下图,三角形ABC中被光栅化出来的像素D点,D点的属性值由ABC三点线性插值而来,假如D点是三角形重心,则D点的各种属性的值是(A点值+B点值+C点值)/3。

 

图.

 

【扩展】插值并不只是简单的线性加权,可能会涉及到是否perpspective-correct的考虑,在此简化为线性插值。

 

四. Fragment处理

Fragment处理的数据量远超过顶点处理环节,因为顶点处理环节只处理图元关键的顶点,而Fragment处理环节则是处理被该图元覆盖的所有像素,最主要功能是改变像素的颜色值。在这个步骤,每个像素都是被独立处理的,不存在相互依赖关系。本阶段的输出还是像素。

 

五. FrameBuffer处理

本环节处理的还是fragment,只是,还需要考虑最终frame buffer中的数据,决定对fragment的取舍修改等。

 

六. 2D处理

OpenGL除了定义3D操作外, 实际上还定义了2D操作,诸如对字体、位图等的支持。

 

【说明】诸如evaluator、selection、feedback、display lists用的并不广泛,将被省略。 

你可能感兴趣的:(OpenGL,primitive,buffer,扩展,c)