Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OBB-OBB交点_C++_Computational Geometry_Game Physics - Fatal编程技术网

C++ OBB-OBB交点

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之间的交点的线程。我仍然不知道如何找到最小穿透轴。我需要找到最小穿透轴,我相信它在David Ebery的论文中也被称为最后一个分离轴,以计算出我应该使用表格的哪一部分来计算交点。这是论文,感兴趣的页面从9开始。

那么如何找到最小穿透轴/最后分离轴

这里起作用的是分离轴定理 看

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

由于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向量。我不知道如何处理这个问题。你是对的,这种情况可能是由于并行性(叉积消失)而发生的。你可以忽略这个轴-在这种情况下,其他轴会处理它。可视化并行配置有助于理解原因。