现在经过一些工作,我终于明白了如何创建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上有一个分离轴定理的工作实现吗? :|答案 0 :(得分:1)
如果Ks是不同的顺序,只需将i循环运行到最小值a.K / 2或b.K / 2.