图7.10 P不遮挡Q的情况:(a)~(e),(f)是三个平面互相遮挡的例子


(a)

(b)

(c)

(d)

(e)

(f)

��1) 根据每个待排序的多边形顶点z坐标的极小值Zmin(即离视点最远,视方向为Z轴的负方向)把多边形作一初步的排序。
��2) 设Zmin最小的多边形为P,它在待排序的多边形中暂时成为优先级最小的多边形,其他的多边形称为Q,进一步确定P和Q的遮挡关系。
��3) 如果P的顶点的z坐标的最大值PZmax 比Q的顶点的z坐标的最小值Q Zmin小,则P肯定不遮挡Q
��4) 如果列表中的每个Q均有QZmin > PZmax, 则P确是优先级最低的多边形。
��5) 对每一QZmin <PZmax,作进一步的检测,包括:
  • P和Q在xoy平面上的投影的包围盒不重叠。例如:在图7.10(a)中,P和Q在oxy平面上的投影的包围盒在X方向上互不相交;图7.10(b)中,P和Q在oxy平面上的投影的包围盒在Y方向上互不相交。
  • P和Q在xoy平面上的投影不相交(如图7.10(e)所示)。
  • P的各顶点均在Q的远离视点的一侧,见图7.10(c)。
  • Q的各顶点均在P的靠近视点的一侧,见图7.10(d)。
    上述四项只要有一项成立,P就不遮挡Q,转6);否则,转7)。
  • ��6) 将P加入多边形优先级列表中,其优先级等于它加入该优先级表的顺序号。将P从待排序的多边形中删除。如果只剩一个多边形,转9);否则,转2)。
    ��7) 如果上述四项检测都不成立,则把PQ交换一下次序,再进行上述各项检测。但交换次序时要对原来的优先级最低的多边形作一标志,避免多边形相贯时的循环交换。
    ��8) 出现循环交换时,把P从原多边形初步排序队列中删除,并把P按遮挡关系分成两个多边形,再插入按每个多边形顶点z坐标的极小值Zmin所作的初步排序队列中(以便可得到正确的深度排序的多边形优先级列表);转2)。
    ��9) 将最后一个多边形加入多边形优先级列表中,其优先级最高。


    ��对于两个面相交、或者两个以上的面相互重叠的情形,仅仅用排序的办法不能得到正确的深度排序,这时必须把有关的面按交线或遮挡关系进行分割后再排序。