3D数学 学习笔记(10)背面剔除、裁切、光栅化
发表于2018-01-03
背面剔除(Backface Culling)
移除没有面对这镜头的三角形,只考虑三角形与摄像机的相对位置而不依赖与摄像机朝向。依靠三角形顶点顺序直接判断法向量方向(左手法则)。
顺时针法向量朝外,逆时针朝内,剔除。
下图圈中法向量方向虽然和镜头方向大致相同(小于180度),但实际上是看得到的。
裁切(Clipping)
把不在视锥体内或不完全在的三角形清除或剪切。输出裁切后的顶点。每条边分四种情况:
多边形裁剪:
光栅化(Rasterzation)
在裁切后,顶点会投影到屏幕坐标。概念性的有以下5个执行步骤:
1. 插值(Interpolate),大部分计算如:顶点级别的纹理坐标、颜色、法线都要在着色前计算好。
2. 深度测试(Depth test),剔除掉被遮住的像素。这里计算也可能是在着色后计算。
3. 着色(Shader):为像素计算颜色。一般先光照后雾化,输出的颜色包含透明值,即RGBA。
4. 透明测试(Alpha test),丢弃过度透明的物体。有透明的物体不需要写入深度缓冲。
5. 写入(Write),通过深度和透明测试的像素,会更新帧缓存和深度缓冲。深度缓存用新值直接替换旧值。帧缓存没有开启混合,则可直接替换,否则需要用alpha值混合。