John Warnock先生提出了一种区域细分算法,这就是为什么也称为Warnock算法的原因。该算法在计算场景中的可见表面时广泛使用了区域相干性的概念,该表面更接近于观察平面,区域相干性避免了对公共表面的可见性检测的计算,该计算已经在较早的步骤中进行了计算,因此无需重新计算。这就是所有区域一致性所要做的。
区域细分算法基于分而治之的方法,其中可见(查看)区域被连续划分为越来越小的矩形,直到检测到简化区域为止。考虑到将要投影多边形的窗口面板给出的如下:
当我们将窗口面板细分为多边形时,可能会遇到以下几种情况:
1.周围表面: 它是 可视多边形表面完全围绕整个窗口面板的情况。
2.重叠(相交)面: 在这种情况下,窗口面板(视口)和观察多边形表面都相交。
3.内部(包含)表面: 在这种情况下,整个多边形表面都内接在窗板内部。这种情况恰好与第一个(周围表面)情况相反。
4.外部(不相交)表面: 在这种情况下,整个多边形表面完全在窗口面板的外面。
算法:
- 初始化查看区域或窗口面板尺寸。
- 列出所有多边形,并根据相对于窗口面板(视口)的Z min(深度值)对它们进行排序。
- 根据它们落入的相应情况对所有多边形进行分类。
- 现在,执行可见表面(隐藏表面去除)检测测试:
- 如果我们有一个多边形,该多边形已完全包围了窗口面板,则将查看区域颜色设置为存储在帧缓冲区中的相应多边形颜色。
- 如果征集的多边形在窗口面板外不相交或完全不在窗口面板中,则在这种情况下,将完成窗口平面的背景色,并将忽略多边形。
- 如果多边形完全包含(内接)在窗口面板内,则从其对应的颜色对多边形进行着色,并用背景色对表面的其余部分进行着色。
- 如果多边形和窗户面板的表面相互交叉(重叠),则需要考虑以下情况:
- 用在帧缓冲区中设置的相应多边形颜色填充重叠区域。
- 如果给我们一个以上的多边形,且其相对于寡妇平面的表面重叠,则在这种情况下,我们首先找出深度缓冲区(Z min ),以找到更靠近窗口的多边形表面面板,并使用最小(Z min )多边形的颜色填充重叠区域。
- 对所有给定的多边形重复上述所有步骤,然后退出。