检查直角棱镜的哪个面发生碰撞

时间:2018-08-07 03:09:31

标签: 3d collision-detection game-physics physics collision

我正在制造3D物理引擎,它具有简单的直角棱镜碰撞,没有旋转。

现在,我非常简单地进行碰撞:(有关详细的图形和更多信息,请参见this website

let a and b be rectangular prisms
collide if:
   (min x of a <= max x of b AND max x of a >= min x of b) AND
   (min y of a <= max y of b AND max y of a >= min y of b) AND
   (min z of a <= max z of b AND max z of a >= min z of b)

这很好用,但是我需要知道矩形碰撞到的表面以弄清楚如何弹跳。

是否存在一个公式来检测两个直角棱镜碰撞的面?

2 个答案:

答案 0 :(得分:0)

如果两个直角棱镜碰撞(即相交),那么哪个表面引起碰撞将是模棱两可的: enter image description here

您需要知道对象的矢量才能确定面孔。

答案 1 :(得分:0)

在我的场景中,我意识到引起碰撞的面部将是交点最少的面部。

这是因为在设置了其他两个轴之后,当尝试使最后一个轴重叠时,它将在它们比触摸更近之前停止。

因此,a max == b min所在的轴是面部所在的轴。 检查哪个是向上,向下/向左还是向右就像检查一个对象是在另一个对象上方还是在下方/左边还是右边一样简单。

当然,此解决方案仅适用于我的情况,无需轮换。