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

时间:2018-05-05 23:31:54

标签: algorithm graphics 3d polygon z-order

我一直在寻找一个月的答案。我有两个3D三角形,每个都有坐标。它们可以处于任何方向和位置,但不相交。我在同一个3D空间也有一个摄像头。现在我简单地想要弄清楚,就像我应该使用Painter的算法,其中一个三角形是前面的,也就是说。我需要选择哪一个。

我知道z-buffers。我知道,当你到达三个三角形以上时,z-sorting存在问题。但假设我只有两个不相交的三角形,保证方法找到正确的z顺序是什么?

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

2 个答案:

答案 0 :(得分:2)

对于非交叉三角形,大部分时间三角形中的一个完全位于由另一个三角形确定的平面的另一侧。 即:将顶点vA置于f(B)的平面方程中给出所有正(或零)或所有负(或零)值。 如果这没有发生,可以尝试另一个订单。

之后我们需要将相机坐标设置为相同的等式,以便我们知道相机是在参考三角形的前面还是后面。参考平面/三角形现在位于零距离处,另一个三角形位于距离 d 且摄像机位于距离 c 处。如果 c d 的符号相同,则参考平面是最远的。

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

enter image description here

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

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

答案 1 :(得分:1)

找到separates两个三角形的平面就足够了。然后前面的三角形是与摄影机位于平面同一侧的三角形。

构建maximum-margin classifier将为您提供这样的平面。