不同K和体积之间的K-Dop碰撞

时间:2010-01-30 13:47:39

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

现在经过一些工作,我终于明白了如何创建KDop边界体积以及碰撞是如何交叉的,我制作了它们的工作实现。 现在问题是另一个问题。 :d

我如何相交(必须是可能的,或者没有任何意义)2 K-Dop具有不同的K值? (显然我们事先知道哪个轴用于创建那些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和一个球体之间做交集? KDOP和胶囊? KDOP和OOB? KDOP和AABB? (如果我们知道如何处理不同的K(因为AABB基本上是DOP6),这应该会更容易)) 我的意思是在这些简单结构之间进行交叉的常用方法是什么?

非常感谢答案!

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

编辑2:有人在KDOP上有一个分离轴定理的工作实现吗? :|

1 个答案:

答案 0 :(得分:1)

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