OpenGL 的渲染流水线

OpenGL 的渲染流水线

一、渲染:计算机根据模型创建图象。模型(或物体)是由几何图元构成的,而几何图元是通过顶点来指定的。最终渲染的图象由屏幕像素组成。像素(pixel)是显示硬件能够放置到屏幕上的最小的可视元素。有关像素的信息(如颜色)在系统内存中被组织为位面(bitplane)。位面构成了帧缓存(包含图形显示设备为控制屏幕上所有像素的颜色和亮度所需的信息)。 
1、使用几何图元建立模型,从而得到物体的数学描述。(OpenGL将点、直线、多边形、图形和位图视为图元); 
2、在三维空间排列物体,选择观察场景的有利位置; 
3、计算所有物体的颜色。颜色可能是由应用程序指定的、根据光照条件确定的、将问题粘贴到物体上得到的,也可能是上述多种操作的结果; 
4、将物体的数学描述和相关的颜色信息转换为屏幕像素,这被称为光栅化。 
当我们把绘制的图形传递给OpenGL后,OpenGL还要做许多才能完成3D空间到屏幕的投影。这一系列的过程称为OpenGL渲染流水线。一般的渲染流水线过程有如下几步: 显示列表 求值程序 顶点操作 图元装配 像素操作 纹理装配 光栅化 片断操作

OpenGL工作流程图:

OpenGL 的渲染流水线_第1张图片

也可以简单的记为:

OpenGL 的渲染流水线_第2张图片

这是固定管线流程,但是其中顶点处理模块和片元处理模块对于应用程序来说都是可编程的

OpenGL建立三维模型的基本步骤 
从三维空间到二维平面,就如同用相机拍照一样,通常都要经历以下几个步骤(括号内表示的是相应的图形学概念) 
1 将相机置于三角架上,让它对准三维景物(视点变换,Viewing Transformation); 
2 将三维物体放在适当的位置(模型变换,Modeling Transformation ); 
3 选择相机镜头并调焦,使三维物体投影在二维胶片上(投影变换,Projection Transformation ); 
4 决定二维像片的大小(视口变换,Viewport Transformation )。 
这样,一个三维空间里的物体就可以用相应的二维平面物体表示了,也就能在二维的计算机屏幕上正确显示了。

二、 计算机图形学中,存在一种管线结构,在概念上可以分为3个阶段:应用程序、几何以及光栅。应用程序包括:图元数据遍历,摄像机的移动,物体模型的动画移动,物体可见检查,选择细节等级(LOD);几何主要包括:模型和视点变换,光照与着色,投影,裁减,屏幕映射;光栅为像素(Pixel)正确配色,以便绘制完整图像,该阶段进行的都是单个像素的操作,每个像素的信息存储在颜色缓冲器(color buffer或者frame buffer)中。值得注意的是:光照计算属于几何阶段,因为光照计算涉及视点、光源和物体的世界坐标,所以通常放在世界坐标系中进行计算;而雾化以及涉及物体透明度的计算属于光栅化阶段,因为上述两种计算都需要深度值信息(Z值),而深度值是在几何阶段中计算,并传递到光栅阶段的。
      3D世界的大多数高层次方面操作右管线中应用阶段的应用软件负责管理,余下的两个阶段由OpenGL负责管理,顶颜色,光照,材质三个输入在光栅化前控制绘制管线的操作。光照和材质不能单独使用。顶点颜色,光源颜色,材质颜色都有alpha值,它们的alpha经过运算最后会保存在光栅化后的图元 中,也就是说它们的影响也就在上图中红色虚线上方。输入是点(几何坐标、顶点颜色),矩阵,光照(光源,参数),材质,输出是片元。纹理映射的过程的本质是根据纹理信息对片元的再处理,这个过程可能改变片元的alpha值。输入是片元,纹理(纹理坐标、各种参数),输出还是片元。 Alpha值最终通过Alpha混合阶段影响绘制效果,输入时片元,输出是帧缓存颜色值。其管线流程如下图:

OpenGL 的渲染流水线_第3张图片OpenGL 的渲染流水线_第4张图片

你可能感兴趣的:(cocoa图形编程)