因为如果点在eye后面,则经过透视除法以后坐标会变错。所以不能推迟到归一化设备空间中再做近截面剪裁。
分析如下:
设P(x,y,z)是相机空间一点,变换到剪裁空间再经透视除法变换到归一化设备空间坐标为Pd(xd,yd,zd),有:
xd=-x/z*(cot(fovy/2)/aspect)
yd=-y/z*cot(fovy/2)
zd=(f+n)/(f-n)+2fn/(f-n)*(1/z)
如果P与eye在一条水平线上,则z=0,(xd,yd,zd)发散。
如果P在eye后面,即z>0,则zd>0,于是xd与x符号相反,yd与y符号相反。
也就是说,当P在eye后面时变换到归一化设备空间会发生左右上下颠倒。得到的Pd坐标是错的。
通过几何作图也可以看到这一点: