OBB-OBB交叉点

时间:2013-07-25 21:07:48

标签: c++ computational-geometry game-physics

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

1 个答案:

答案 0 :(得分:2)

这里的工作是分离轴定理 请参阅http://en.wikipedia.org/wiki/Hyperplane_separation_theorem

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

由于OBB有6个面,其中2个是平行的,因此每个OBB有3个正常值。

交叉乘积的另外3x3,给出3 + 3 + 3x3 = 16法线进行测试。

在由这些法线和一个点定义的线上投射两个OBB,例如:起源。

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

你要求的是最低渗透率的轴心,这似乎没有在Eberly的论文中直接涵盖。

您必须比较所有投影的重叠,并至少采用一个投影。这将是您的重叠深度。从第7页的Eberly表1中计算每个轴的R - (R_0 + R_1)应该可以做到这一点(请注意,必须完成从第6页顶部省略的公共分区L * L才能获得真正的重叠深度)。

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

子弹物理学有类似的东西,我想。