2

我已经查看了一些关于找到两个 OBB 之间的交点的线程。我仍然不明白如何找到最小穿透轴。我需要找到最小穿透轴,我相信它在 David Eberly 的论文中也被称为最后一个分离轴,以确定我应该使用表格的哪个部分来计算交点。这是论文,感兴趣的页面从 9 http://www.geometrictools.com/Documentation/DynamicCollisionDetection.pdf开始。
那么如何找到最小穿透轴/最后分离轴?

4

1 回答 1

2

这里起作用的是分离轴定理,请参见http://en.wikipedia.org/wiki/Hyperplane_separation_theorem

正如那里暗示的那样,对于多边形网格,可能要测试的分离轴是两个对象的面法线和叉积。

由于 OBB 有 6 个面,每个面有 2 个平行,因此每个 OBB 有唯一的 3 个法线。

叉积的另一个 3x3,给出 3+3+3x3=16 个法线进行测试。

将您的两个 OBB 投影在由这些法线和一个点定义的线上,例如原点。

如果投影重叠,则您没有接触(因此,“分离”轴)。

您所要求的是最小穿透轴,Eberly 的论文似乎没有直接涵盖该轴。

您必须比较所有投影的重叠,并取最少的一个。这将是您的重叠深度。从 Eberly 第 7 页的表 1 计算每个轴的 R - (R_0 + R_1) 应该可以解决问题(请注意,必须完成第 6 页顶部遗漏的公共除法 L*L 才能获得真正的重叠深度)。

开放动态引擎上的代码示例:http: //sourceforge.net/p/opende/code/1939/tree/trunk/ode/src/box.cpp (如果您想严格获得最少重叠的轴,请忽略它们的 fudge_factor )。

我猜子弹物理也有类似的东西。

于 2013-07-25T22:11:19.417 回答