C++ OBB-OBB交点
我已经研究了几个关于查找两个OBB之间的交点的线程。我仍然不知道如何找到最小穿透轴。我需要找到最小穿透轴,我相信它在David Ebery的论文中也被称为最后一个分离轴,以计算出我应该使用表格的哪一部分来计算交点。这是论文,感兴趣的页面从9开始。C++ OBB-OBB交点,c++,computational-geometry,game-physics,C++,Computational Geometry,Game Physics,我已经研究了几个关于查找两个OBB之间的交点的线程。我仍然不知道如何找到最小穿透轴。我需要找到最小穿透轴,我相信它在David Ebery的论文中也被称为最后一个分离轴,以计算出我应该使用表格的哪一部分来计算交点。这是论文,感兴趣的页面从9开始。 那么如何找到最小穿透轴/最后分离轴 这里起作用的是分离轴定理 看 正如这里所暗示的,对于多边形网格,可能要测试的分离轴是两个对象的面法线和叉积 由于OBB有6个面,其中每个面2个平行,因此每个OBB有唯一的3条法线 交叉积的另一个3x3,给出3+3+3
那么如何找到最小穿透轴/最后分离轴 这里起作用的是分离轴定理 看 正如这里所暗示的,对于多边形网格,可能要测试的分离轴是两个对象的面法线和叉积 由于OBB有6个面,其中每个面2个平行,因此每个OBB有唯一的3条法线 交叉积的另一个3x3,给出3+3+3x3=16条法线进行测试 将两个OBB投影到由这些法线和一个点(例如原点)定义的线上 如果投影重叠,则没有接触(因此,“分离”轴) 你所要求的是最小穿透轴,这似乎在Eberly的论文中没有直接涉及 您必须比较所有投影的重叠,并取最小的一个。这将是您的重叠深度。从第7页的Ebery表1中计算每个轴的R-(R_0+R_1)应该可以做到这一点(只需注意,必须完成第6页顶部遗漏的公分L*L,以获得真正的重叠深度) open dynamics engine的代码示例: (如果您严格希望得到重叠最少的轴,请忽略其模糊因子)
子弹物理学也有类似的东西,我想。非常感谢您的澄清!我以为我只需要测试15轴,但我知道你的意思。为了确保我需要找到R-(R|0+R|1)/(| L | L |*| L |)的结果。换句话说,我应该将R-(R_0+R_1)除以L的平方大小,得到实际距离?L是轴,这应该是正确的,至少对于前6个轴是如此。从我的脑后来看,我认为其他9个应该是相同的,但请随意检查第6页上的公式以进行验证。我通过测试发现,当OBB的法线平行时,R-(R_0+R_1)等于0。R=R_0=R_1=0。因此,碰撞的法线是0,0,0向量。我不知道如何处理这个问题。你是对的,这种情况可能是由于并行性(叉积消失)而发生的。你可以忽略这个轴-在这种情况下,其他轴会处理它。可视化并行配置有助于理解原因。