在齐次空间对顶点和线裁剪是如今图形学管线进行裁剪的标准做法。一个世界坐标系下点经过观察变换后会映射到屏幕空间,在这其中会经过如下的矩阵变换:世界坐标系到相机坐标系的变化,相机坐标系下的透视投影变换到规范化空间,然后从规范化空间变换到屏幕空间。其中,裁剪就发生在透视投影变化之后,但在透视除法之前。先简单解释透视投影和透视除法:
透视投影指经过透视变化矩阵之后的得到齐次坐标;
透视除法指将透视投影得到的齐次坐标转化为三维坐标,即除以齐次分量,经过透视除法的点才是在规范化裁剪立方体中的点。
为什么不在投影除法后裁剪呢?为了简单起见,取投影参考点是观察坐标原点,近裁剪平面是观察平面的透视变化矩阵:
其中
θ
是相机的视角,
aspect
是近裁剪平面的纵横比,
znear
和
zfar
分别是近裁剪平面和远裁剪平面。
对于相机坐标系下的任意一点
P(x0,y0,z0,1)
,经过该矩阵变化后得到
P1=MP0
,
P1
的坐标为
(x1,y1,z1,w)
。从该矩阵中可以看到
z1=s∗z0+t
,其中
s=znear+zfarznear−zfar
,
t=−2znearzfarznear−zfar
,可以看到
s
和
t
都是常数,所以
z1
和
z0
之间是线性关系,同理
x1
与
x0
,
y1
与
y0
都是线性关系。
w=−z0
。如果此时对
P1
进行透视除法,得到
P′1=(x′1,y′1,z′1,w′)=(x1/w,y1/w,z1/w,1)
,此时
x′1
与原
x0
之间不再是线性关系,
x′1
是以
x0
和
z0
为变量的函数。如果在透视除法后进行裁剪,那么将不能运用线性插值,否则很多在原来坐标系中的存储信息将会变形,比如:纹理、颜色等。所以,一般直接在齐次空间中做裁剪,在该空间中进行裁剪可以直接用线性插值。