渲染流程:【1】顶点处理【2】面处理【3】光栅化【4】像素处理
【1】通过一系列的坐标系转化,将模型的顶点在摄像机前进行位移运算,并最终投影到摄像机的投影屏幕上
(1)本地坐标->(2)世界坐标系->(3)观察坐标系->(4)投影坐标系
(1)本地坐标 : 以模型中心点为原点(0,0,0),模型的头的本地坐标为(0,1,0);
(2)世界坐标系: 模型相对于世界原点的坐标为(1,0,0),模型头世界坐标为(1,1,0)
(3)观察坐标系: 摄像机坐标为(2,0,0),模型头的观察坐标为(-1,-1,0)
(4)投影坐标系: 点的投射
【2】
(1)面的组装->(2)面截取->(3)面剔除
(1)面的组装:将顶点按一定顺序连接成面
(2)面的剔除:将在摄像机视角范围外的面截去
(3)面剔除 :根据面法线,将背向摄像机的面剔除
【3】为投影后的3D三角形计算像素颜色
(1)视口变换->(2)背面消隐->(3)顶点属性插值
(1)视口变换:在裁剪之后,硬件会自动执行透视除法,将顶点从齐次裁剪空间变换到规范化设备空间(NDC)。一旦顶点进入NDC空间,构成2D图像的2D x、y坐标就会被变换到后台缓冲区中的一个称为视口的矩形区域内(回顾4.2.8节)。在该变换之后,x、y坐标将以像素为单位。通常,视口变换不修改z坐标,因为z坐标还要由深度缓存使用
(2)背面消隐:让管线放弃对朝后的三角形的处理
(3)顶点属性插值:
除位置外,顶点还可以包含其他属性,比如颜色、法线向量和纹理坐标。在视口变换之后,这些属性必须为三角形表面上的每个像素进行插值。顶点深度值也必须进行插值,以使每个像素都有一个可用于深度缓存算法的深度值。对屏幕空间中的顶点属性进行插值,其实就是对3D空间中的三角形表面进行线性插值;这一工作需要借助所谓的透视矫正插值(perspective correct interpolation)来实现。本质上,三角形表面内部的像素颜色都是通过顶点插值得到的。
【4】
像素着色器会处理每个像素片段(pixel fragment),它的输入是插值后的顶点属性,由此计算出一个颜色。像素着色器可以非常简单地输出一个颜色,也可以很复杂,例如实现逐像素光照、反射和阴影等效果。
【逐像素光照】:逐像素光照是对所有光照元素进行单独插值,简单地说就是在pixelshader中计算颜色
【逐顶点光照】简单地说就是在vetext shader中计算光照颜色,该过程将为每个顶点计算一次光照颜色,然后在通过顶点在多边形所覆盖的区域对像素颜色进行线形插值。现实中,光照值取决于光线角度,表面法线,和观察点(对于镜面高光来说)