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