我已经看了几个关于寻找两个OBB之间的交叉点的线索。我仍然不明白如何找到穿透力最小的轴。我需要找到穿透度最小的轴,我认为这也是David Eberly论文中的最后一个分隔轴,以确定我应该使用表格的哪一部分来计算交点。这是这篇论文,感兴趣的页面从9 http://www.geometrictools.com/Documentation/DynamicCollisionDetection.pdf开始。
那么如何找到穿透最少的轴/最后一个分隔轴?
发布于 2013-07-26 06:11:19
这里起作用的是分离轴定理,参见http://en.wikipedia.org/wiki/Hyperplane_separation_theorem。
正如这里所暗示的,对于多边形网格,可能要测试的分离轴是两个对象的面法线和叉积。
由于OBB有6个面,其中每个面有2个平行的面,因此每个OBB有唯一的3条法线。
另一个3x3用于叉积,给出3+3+3x3=16法线进行测试。
将两个OBB投影到由这些法线和一个点定义的线上,例如原点。
如果投影重叠,则没有接触(因此,“分离”轴)。
你所要求的是最小渗透率的轴线,这似乎没有在Eberly的论文中直接涵盖。
你必须比较所有投影的重叠,并取最小的一个。这将是您的重叠深度。从第7页的表1中计算每个轴的R- (R_0 + R_1)应该可以做到这一点(只需注意从第6页的顶部省略的公共除法L*L必须完成才能获得真正的重叠深度)。
open dynamics engine上的一个代码示例:http://sourceforge.net/p/opende/code/1939/tree/trunk/ode/src/box.cpp (如果您严格想要获得重叠最少的轴,请忽略它们的fudge_factor )。
子弹物理学也有类似的东西,我猜。
https://stackoverflow.com/questions/17868767
复制相似问题