滑动AABB碰撞 - 卡在边缘上

Jef*_*eff 6 algorithm geometry collision game-physics

我正在研究基于3D平铺的游戏,我正在使用AABB碰撞检测.对于玩家交叉的每个立方体,我发现玩家与立方体相交的轴最少,并沿着该轴将玩家推出立方体.

根据检查多维数据集的顺序,这可能会导致沿多个多维数据集的边缘滑动时出现问题.我创建了一个应该解释问题的图表:

http://imgur.com/mmK0W.png

  • 箭头#1是玩家的尝试移动.其他箭头是碰撞响应.
  • 在左图中,首先针对正确的立方体测试碰撞,使得玩家被推向左侧,然后向上推动.()
  • 在右图中,首先对左侧立方体进行碰撞测试,使玩家向上推,此时玩家不再与另一个立方体相交.(好的)

关于解决这个问题的最有效方法的任何想法可能是什么?或者更好的方法来处理碰撞响应?

谢谢.

Rin*_*g Ø 4

离散实现迫使您仅在需要时(立方体/方向重叠)在系统中注入一些连续数学。

对于检查时与用户立方体 ( uc ) 相交的每个立方体c1c2 ... ci ,您想要找出第一个“接触”的立方体 - 只有一个,就像在现实生活中一样。考虑uc的方向,并计算ciuc的数量(重叠),找到cu在“接触” ci时的位置。d

确定哪个立方体首先被“触及” cj(需要在轴上回滚最多的立方体d- 时间越早)并仅使用这个立方体来计算碰撞反应。

您不仅会达到准确性。但如果所有的立方体都在移动,有不同的速度等等,这将会有所帮助......