【问题标题】:K-Dop collision between different K and Volumes不同 K 和 Volumes 之间的 K-Dop 碰撞
【发布时间】:2010-01-31 01:54:48
【问题描述】:

现在经过一些工作,我终于了解了 KDop 包围体是如何创建的以及碰撞是如何相交的,并且我对它们进行了有效的实现。 现在问题是另一个。 :D

我怎样才能相交(必须有可能,否则没有任何意义)不同 K 值的 2 K-Dop? (显然我们事先知道哪个轴被用来创建这 2 个 K-Dop。)

比如我怎样才能使 DOP6 (AABB) 和 DOP14 (AABB + 切角) 相交? 还是 DOP14(AABB + 切角)和 DOP26(AABB + 切角 + 切边)?

简单的方法(KDOP与相同K之间)是

 public Boolean Intersects(kDOP a, kDOP b)
        {
            // TODO : How to do if the K is not the same?
            for (int i = 0; i < a.K / 2; i++)
                if ((a.Min[i] > b.Max[i]) || (a.Max[i] < b.Min[i]))
                    return false;
            return true;
        }

另一个问题是。如何在 KDOP 和说 Sphere 之间进行交集? KDOP 和胶囊? KDOP和OOB? KDOP和AABB? (如果我们知道如何处理不同的 K,这应该会更容易(因为 AABB 基本上是 DOP6)) 我的意思是在这些简单结构之间进行交集的常用方法是什么?

非常感谢您的回答!!!

编辑:从网上的一些搜索看来,分离轴是要走的路,但我找不到任何关于如何在 K-DOP 上实现它的详细信息。 :P

编辑 2:有人在 KDOP 上实现了分离轴定理吗? :|

【问题讨论】:

    标签: c# c++ math directx collision-detection


    【解决方案1】:

    如果 K 的顺序不同,只需将 i 循环运行到 a.K/2 或 b.K/2 的最小值。

    【讨论】:

    • 就这么简单? XD 我的意思是轴的顺序可以不同,还是我必须命令它们在两个结构中相同?比较 KDOP 14 (AABB, Corners) 和 KDOP26 (AABB, Corners, Edges)。我是否应该以相同的顺序排列它们(以便检查 AABB 和 AABB,检查角和角,不考虑边缘?)其他卷呢?像Spheres之类的?有什么想法吗?
    • 另一个注意事项,如果我必须订购它们,我将如何检查 DOP6 (AABB) 和 DOP8(角)?
    • 只有当它们是子集时才有效。 KDOP6、KDOP14、KDOP26 以及如果轴的顺序相同。 Real Time Collision Detection (realtimecollisiondetection.net) 这本书有一个非常好的章节,介绍了许多不同 BB 之间的交集。
    • 很好,反正我不需要 DOP8。 :P 最后一个问题,如何在 KDOP 和非复杂的其他结构(如球体?)之间进行碰撞? (我有那本书,但没有深入讨论这些结构)
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多