整体流程
每个阶段环环相扣,前一个阶段的输出作为后一个阶段的输入。
应用阶段
该阶段准备的是场景,对象的基本数据。例如场景里面的物体他们的位置朝向,大小以及物体对应的模型里边每一个顶点的位置、法线、切换等,再比如场景光源的位置朝向和一些基本的属性,还有摄像机的位置朝向等。
几何阶段
顶点着色器:计算顶点光照(需要知道光源位置喝朝向以及摄像机的位置和朝向,以及当前顶点的世界位置)
曲面细分着色器:通过现有顶点生成更多顶点(需要知道现有顶点在模型里的现有信息)。
几何着色器:通过现有的图元来做一些几何方面的操作,生成更多的顶点和图元(例如对现有图元的顶点生成法线)
顶点裁剪:干掉屏幕外看不到的顶点(OpenGL XYZ -1~1 ;D3D xy -1~1,z 0~1)
屏幕映射:将顶点位置从3d坐标空间转移到2d坐标空间
光栅化阶段
三角形设置:将映射到2d空间里的顶点位置组装成三角形
三角形遍历:需要知道三角形包含了那些2d空间的像素点
片段着色器:对这些点使用他们包含的数据来着色,并为后面的逐片元着色准备数据
逐片元着色(May佬提:属于光栅化阶段)
此时操作对象变成了光栅化操作输出的片元数据。片元->屏幕上的一个着色点,对于所有片元进行一系列测试(透明度测试、深度测试、模板测试),通过的保存否则遗弃。
后处理
对得到的数据进行后处理->图像处理,比如模糊、景深、高光等