【问题标题】:Two 3D triangles, method to figuring out z-order (graphics)两个 3D 三角形,计算 z 顺序的方法(图形)
【发布时间】:2018-10-16 02:57:28
【问题描述】:

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

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

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

【问题讨论】:

  • 您可以将一个三角形与另一个平面分开,创建一个“迷你”BSP-tree,然后按顺序遍历。

标签: algorithm graphics 3d polygon z-order


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 好吧,这似乎合乎逻辑。我会尝试让它同时适用于透视和正交投影。现在谢谢。
  • 可能有两个不相交的三角形,这样每个三角形的平面都与另一个三角形相交。
【解决方案2】:

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

构造一个maximum-margin classifier 会给你一个这样的飞机。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2017-06-30
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    相关资源
    最近更新 更多