7.1.2 凹多面体的隐藏线消除

��凹多面体的消隐比凸多面体的要复杂得多。对于隐藏线消除问题,总是假定它们是用线框图方式表示的。在这种方式下,多面体用棱来表示,多面体的隐藏线消除问题就是要消除被完全遮挡或部分遮挡的棱。因此,多面体的隐藏线消除问题就转化成为直线(棱)与多边形的遮挡判断问题:
��对于空间线段P1P2 和多边形,首先需要判断P1P2 是否被多边形遮挡?如果有遮挡,则计算出被遮挡的线段部分。为此,以视点为投影中心,将线段和多边形顶点投影到屏幕上,并判断其投影是否相交。如果相交,再将线段与各多边形分别进行隐藏比较,确定可见的子线段。
��为了减少不必要的复杂计算,首先计算物体表面各多边形的外法矢量,当视线方向矢量V与某多边形的外法矢量N的点积V・N>0时,该多边形为后向面(见图7.5),这是自隐藏面;反之为前向面,这是潜在的可见面。删除所有的后向面,只保留前向面参加消隐计算。此外,还可以采用包围盒技术对多边形与线段是否相交进行初判等等。