两个 3D 三角形,计算 z 顺序的方法(图形)

Two 3D triangles, method to figuring out z-order (graphics)

一个月来我一直在寻找这个问题的答案。我有两个 3D 三角形,每个三角形的坐标。它们可以处于任何方向和位置,但不相交。我也有一个相同的 3D 相机 space。现在我只是想弄清楚,就像我应该使用画家的算法一样,也就是其中一个三角形在前面。我要画第二个

我知道 z 缓冲区。我知道一旦达到三个三角形及以上,z 排序就会出现问题。但是假设我只有两个不相交的三角形,guaranteed 找到正确 z 顺序的方法是什么?

我尝试了到相机的平均距离、最近的顶点,但在各种情况下都失败了。

找到separates两个三角形的平面就足够了。那么前面的三角形就是和相机在平面同一侧的三角形。

建造一架maximum-margin classifier会给你这样的飞机

对于不相交的三角形大部分时间其中一个三角形完全位于另一个三角形确定的平面的另一侧。 即:将顶点 vA 放到 f(B) 的平面方程中给出所有正(或零)或所有负(或零)值。 如果没有发生这种情况,可以尝试其他顺序。

之后我们需要将相机坐标放入相同的方程式中,以便我们知道相机是在参考三角形的前面还是后面。参考 plane/triangle 现在距离为零,另一个三角形距离为 d,相机距离为 c。如果cd符号相同,则参考平面最远

然而,正如DavidE所指出的,两个不相交的三角形不一定满足这个条件。当另一个命令也失败时,必须找到一个分离平面。

IMO 这可以通过检查多达 9 个参考平面候选来实现:select 来自三角形 A 的两个顶点(即边)和来自三角形 B 的一个顶点作为分离平面候选。现在,三角形 A 的剩余顶点与三角形 B 的两个剩余顶点相比,应该位于候选参考平面的不同侧。在此配置中,9 个候选中的两个候选形成一个分离平面。通过对称性,可能还必须尝试其他 9 种组合(一次从 B 取一条边,从 A 取一个顶点)。

尝试前两种情况并简单地将另一个三角形与参考平面分开可能在计算上更有效。拆分三角形形成三个三角形或一个三角形和一个具有明确定义的绘制顺序的多边形。作为奖励,现在实际上也处理了相交的三角形。