【发布时间】: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