现在,在完成一些工作之后,我终于了解了如何创建KDop边界体积以及如何相交碰撞,并实现了它们的有效实现。
现在的问题是另一个。 :D

我如何相交(必须可行,否则就没有意义)2个K值不同的K-Dop? (显然,我们事先知道使用哪个轴创建了2 K-Dop。)

像我如何相交DOP6(AABB)和DOP14(AABB +切角)?
还是DOP14(AABB +切角)和DOP26(AABB +切角+边)?

简单的方法(在具有相同K的KDOP之间)是

 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上有分离轴定理的有效实现吗? :|

最佳答案

如果K是不同的阶数,只需将i循环运行到至少a.K / 2或b.K / 2。

07-26 09:21