这个问题我一开始也有疑惑,后来想了想,我的理解是:
因为三角形的view变换涉及到了除以z,所以是一个非线性变换。也就是说原来在视椎体的三角形被压缩到了一个方块里面坐标的变化并不是线性的。如果用线性插值求出某一个像素的z值是不准确的,而z值又涉及到了像素的覆盖问题,所以需要根据三角形顶点本身的深度值重新计算出该像素在方块里的准确z值,至于计算方法楼上的大佬发的链接有详细的证明。
至于颜色和法向量为什么可以用线性插值我认为是因为它们本身就是不精确的,就算在原来的三维空间也很难将某个点的颜色和法向量可以准确地计算出来,所以选择相信线性插值的结果。