(有图未加)
5.9 裁剪
在视窗锥的几何体应该被完全去掉,与视锥边缘橡胶的几何部分应该被裁剪,只有内不得被保留。图示了2D中如何裁剪。
我们可以把视锥看做一个六面体。——上、下、左、右、近、远平面。为了把一个多边形按照视锥裁剪,我们必须按照每个面逐一裁剪。当我们把一个多边形按照某一个面裁剪的时候,在正方向的那个面被保留了,负方向的那个面被去掉了。裁剪一个凸多边形总会得到一个凸多边形。总之硬件会做这件事,我们这里不细说;有兴趣的读者可以看很流行的Sutherland-Hodgeman裁剪算法。它基本上是寻找平面和多边形边缘的交点,然后让顶点重新组合成一个新的裁剪多边形。
[Blinn78]描述了一种如何在4D齐次空间做这种裁剪的方法。在投影除法之后,视锥中的点应该满足以下边界关系:
在变换之前应该满足这个关系:
也就是说,点被限制在这个简单的4D平面中:
了解了这一点之后,我们就可以使用一个裁剪算法了。注意到分割检测被扩展到了四维,所以我们可以用用4D点和4D平面在齐次裁剪控件中做这个检测。