1.5 OpenGL渲染管线

来源:互联网 发布:始作俑者其无后乎意思 编辑:程序博客网 时间:2024/05/01 23:45

先来解释渲染管线。渲染是一个过程,将对物体的描述转换成图像的过程。管线,又叫流水线,通常为了完成一项比较大的任务,将任务分成很多小步骤,没一步做完该步骤的事之后,又交给下一个步骤做,直到最终完成。这一系列步骤就叫流水线。

OpenGL渲染管线,是指将图形描述转换成图像过程中,一系列相关的处理阶段。

下面是书中的渲染管线图。


这个图中的内容很多,书中建议首次接触的时候,跳过,以后每看完一章,再来看这个图。

先来看两头两尾。这个渲染管线是将图形描述,转换成图像。 图形描述有图中的顶点数据,像素数据,显示列表。最终图像存储在帧缓冲区中。


显示列表

显示列表是一组存储在一起的OpenGL函数,可以在以后执行。调用一个显示列表时,它所存储的函数就会按照顺序执行。
这个其实就是将一些操作集合到一起,存起来,供以后使用。比如我想画一个心,则可以把画这个心的函数存起来,放在显示列表中,在需要画的地方再调用显示列表。

求值器

求值器提供了一种方式,只用少数的控制点来指定曲线或表面上的点。然后,就可以按照任意的精度来渲染曲线或表面。
举个例子,我们指定两个点(-1.0, 0, 0) 和 (1.0, 0, 0),要求用这两个点来画一条直线。 由于直线是由很多的点组成的,那么位于
这两个端点之间的点,需要由求值器计算出来。这就是求值器的作用。

基于顶点的操作

这个步骤的任务是将顶点数据,投影到屏幕上的一个位置。比如指定了顶点(0, 0, 0),那么这个点,投影到屏幕上,可能就是二维屏幕上的一个点,比如(200, 200)。

图元装配

图元装配产生的结果就是完整的几何图元。也就是根据相关的颜色、深度(有时还有纹理坐标值以及和光栅化处理有关的一些指导信息)进行了变换和裁剪的顶点。
图元装配有好几个任务,一个任务是裁剪,一个任务是透视除法,还有视口和深度操作。
裁剪的任务是消除位于半空间之外的那部分几何图元,这个半空间是由一个平面所定义的。简单的说就是OpenGL的绘制范围有限,只绘制位于绘制范围内的点。
透视除法的任务是使远处的物体看起来比近处的物体更小一些。
视口操作,将几何图元放置在视口之中。
深度操作,根据当前OpenGL状态,选择离观察者近的点覆盖远的点,或者将两者进行混合。

接下来还有像素操作、纹理装配、光栅化、片段操作。

像素操作

这个像素操作,指的是将像素数据,在内存和帧缓冲区之间进行转移,交换。比如,我要将OpenGL绘制的图形,保存为一个bmp文件,那么需要从帧缓冲区中读取像素数据到内存中,然后将内存中的数据写入文件。

纹理装配

纹理,就是覆盖在物体表面的贴图。比如刚买的毛坯房,刷上大白,这就算是一个贴图。汽车上喷漆,也算是纹理贴图。
OpenGL对物体进行纹理装配之后,物体呈现出了更加真实的视觉效果。

光栅化

光栅化就是把几何数据和像素数据转换为片段(fragment)的过程。每个片段方块对应于帧缓冲区的一个像素。
这就是一个汇总的过程,将原来的分开的数据,都汇总到一个像素上。

片段操作

形成片段之后,还需要对这个片段进行修修补补,才能将片段放到最终的帧缓冲区中。对片段的修修补补,就叫片段操作。
片段操作 有 纹理处理,组合主颜色和辅助颜色,可能还会应用一次雾计算,然后执行可用的裁剪测试、alpha测试、模板测试和深度缓冲区测试,然后还可能有混合、抖动、逻辑操作以及根据一个位掩码的屏蔽操作。

我的理解


只能理解到这里了。
0 0