OpenGL管线详解

下图OpenGL的管线,今天来梳理一下他
OpenGL管线详解_第1张图片

!顶点数据
OpenGL将所有的数据都放在VBO中,相当于OpenGL服务端维护的一块内存(常见的命令为glBufferData()).
生成缓存对象后,OpenGL使用glDrawArray(),等绘制命令执行绘制操作,将数据传送到服务端
我们可以将一个顶点视为一个统一处理的数据包,这个数据包,通常包含位置数据,还有决定像素颜色的数据。
2.顶点着色器
顶点着色器可以十分简单,只是简单地把数据传递到下一个着色阶段(此时叫传递着色器,因为只有传递数据的功能)
也可以十分复杂,执行大量的计算来得到最终顶点在屏幕中的位置(这个过程会设计大量的变换矩阵),或者通过光照的计算来判断顶点的颜色。
3.细分着色器(细分控制着色器->细分计算着色器)//这是一个可选的过程。
细分着色器会使用patch来描述一个物体的形状。使用较简单的patch来对物体进行细分,结果就是图元数量的增加,模糊的外观会变得平滑。(两个细分着色器分别管理patch数据并生成最终的形状)
4.几何着色器(可选)
允许在光栅化之前对图元做进一步的处理,例如创建新的图元
5.图文装配
图元装配将顶点数据与相关的图元之间组织起来,准备下一步的裁剪和光栅化工作
6裁剪
顶点可能会落在viewport之外,此时与定点相关的图元会做出改动,确保相关的像素不会在viewport外绘制
7.光栅化
裁剪之后,马上将更新的图元传递到光栅化单元,生成相关的片元
8.片元着色
使用着色器来计算最终片元的颜色和深度值(颜色还可能在下一阶段逐片元时被改变)
顶点着色器决定了一个图元应该在屏幕的什么位置。而片元着色器使用这些信息去确定某个片元的颜色应该是什么。
9逐片元
这是一个独立的片元处理过程,在这个阶段会对片元们进行深度测试(也成为z-buffering)和模板测试,来确定一个片元是否可见。
如果一个片元经过了所有激活的测试,那么他就可以直接被会知道帧缓存中,它对应的像素和深度值会被更新,如果开启了bending模式,那么该片元的颜色会和之前的颜色相叠加,形成一个新的颜色值写入帧缓存。

补充:
modeling pipeline
OpenGL管线详解_第2张图片
rendering pipeline
OpenGL管线详解_第3张图片

你可能感兴趣的:(opengl,面试)