OpenGL渲染管线之概述 (一)

概述:

opengl渲染管线是为了独立出渲染图形的每个过程,因为基于目前的渲染图形理论,渲染同一个场景中的大多数物体的计算过程是相同的,甚至不同场景里的大多数物体的计算过程也可以是相同的,那么就需要将这些相同的操作独立出来,避免重复造*。

流水线阶段:

  1. 模型数据:该阶段是定义绘制的图形的位置,大小,颜色。例如:我们需要在世界坐标系的原点处画一个平面三角形,那么我们至少需要定义这个三角形的三个顶点分别在什么位置(3D空间)。如果需要,我们还可以定义三个顶点分别是什么颜色。基于这些信息,我们就可以确定这个三角形在什么位置和大小。
  2. 顶点着色器:该阶段是转换模型数据里的3D坐标到裁剪坐标系。因为我们的模型数据的坐标都是局部坐标,可物体要真实地被渲染在屏幕上,还需要经过局部坐标系-世界坐标系-观察坐标系-投影坐标系-屏幕坐标系等过程,当然也可以直接从局部坐标系到屏幕坐标系,只是这样的话,这个空间里的所有物体都需要重复实现 世界坐标系-观察坐标系-投影坐标系-屏幕坐标系这个计算过程,而这个过程在这个空间里的大部分物体都是完全一样的。基于此,我们需要一个顶点着色器来应用不同物体之前的3D变化,最大程度地增加重用减小耦合。
  3. 图元装配:该阶段是将模型的定义具体化。因为上面两个阶段的物体只有最小定义,例如三角形由三个顶点即可确定。但是在屏幕上显示的却是完整的三角形。更加关键的是,我们的屏幕是离散的像素点,从三角形的三个顶点,到屏幕上离散的点的集合组成的三角形(只是我们从屏幕上看起来认为是三角形,因为三角形是连续图形的概念),我们不可避免地需要从三角形的三个顶点推断出三角形的连续图形,再将连续图形离散化,显示在屏幕上。而图元装配阶段就是从三个顶点推断出三角形连续图形的定义的过程。
  4. 几何着色器:该阶段是在上一阶段的基础上,修改上一阶段的图元,用以实现特定功能。
  5. 光栅化:该阶段将图元映射为最终屏幕上响应的像素,也即离散化过程。
  6. 片段着色器:该阶段计算每一个像素的最终颜色。所有OpenGL高其效果产生于此。通过使用3D场景的光照、阴影、光的颜色等数据来计算最终像素颜色。
  7. 测试与混合:该阶段使用各种测试和Blend;测试用来判断像素是否应该被抛弃,混合用于混合多个像素的颜色。

大牛们对流水线的总结理解:

OpenGL渲染管线---概述(一) 详细讲述了OpenGL中各个组成模块在流水线中发挥的作用,及对比固定管线与可编程管线,加固理解。

可编程管线,图片引用自上文。下图中省略了图元装配

OpenGL渲染管线之概述 (一)

详细可编程管线图示,引用上文:

OpenGL渲染管线之概述 (一)