定向包围盒(OBB)之间的交点

4
我正在尝试编写一个刚体模拟器,在模拟过程中,我不仅对找到两个物体是否发生碰撞感兴趣,还对碰撞点以及碰撞法线也很关注。我已经找到了许多资源,这些资源实际上使用分离轴定理来判断两个OBB是否相交。我还对OBB的三维表示很感兴趣。现在,如果我知道两个相撞的OBB的最小重叠区域的轴,是否有办法找到碰撞点和碰撞法线?此外,碰撞有两种主要情况,第一种是点-面,第二种是边-边。
我试图通过谷歌解决这个问题,但几乎每个解决方案都只能检测到是否发生碰撞。请好心人帮帮忙!

1
通常,OBB测试被用作一种“保守”的测试,以快速排除不能发生碰撞的对象(有时称为“广义相位”)。如果OBB相交,并且对象可能会发生碰撞,则开始“狭义相位”。在那里,您检查一个对象的每个顶点/边缘是否与另一个对象的每个面/边缘发生碰撞。(这很昂贵 - 因此使用OBB和边界体层次结构!)然后,“碰撞检测”包括计算V/F和E/E对的最近点。如果这些点的距离接近零,则对象在这些点处发生碰撞。 - Marco13
碰撞的确切点实际上取决于确切的轨迹。我们可以假设是一条直线吗?这条直线是否与其中一个盒子对齐? - user1196549
1个回答

0

沿着运动方向观察场景(换句话说,应用坐标变换使该方向变为垂直,并且降低高度)。你会得到一个二维图形。

考虑面对彼此的两个盒子的表面,你会看到两个六边形,每个六边形分成三个平行四边形。

enter image description here

然后

  • 检测2D边缘之间的交点。通过沿着边缘的截面比率,可以确定实际的z距离。

  • 对于所有顶点,在另一个盒子中确定它们所在的面;并从3D方程式中,找到观察线进入面平面的穿透点,因此得到距离。(对A和B的顶点重复此过程。)

比较距离将告诉您哪个碰撞首先发生,并给出第一个会合点的坐标(在变换系统中,返回绝对坐标)。

点在面问题易于实现,因为面是凸多边形。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接