可见性问题可以通过按深度对多边形进行排序(Painter 算法)来解决,并在 z 范围重叠的情况下支持 Newell 算法。Newell 算法在此处和此处进行了解释。第 3 点和第 4 点涉及将多边形 1 的每个顶点与多边形 2 的平面进行比较。
为了得到正确的结果,我们应该在裁剪后进行比较(因为裁剪后的多边形可能会从视点完全位于另一个多边形平面的另一侧)。裁剪是在投影之后完成的(因为投影矩阵定义了要裁剪的截头体),这意味着我们必须在投影之后将顶点与平面进行比较。
此外,我们必须将向量归一化,因为投影空间中的 x、y 和 z 值仅适用于它们自己的 w 上下文。
归一化后,我们不再有线性深度,这意味着如果将两个多边形靠近远平面,它们的 z 值会变得更近。在非线性深度空间中,计算法线、点平面距离或检测点位于平面哪一侧所需的任何东西都将失败。
那么,如何执行“P的所有顶点是否都比Q的平面更深”这一步呢?