碰撞 – 分离轴定理MVT只沿一个轴

我无法沿一个轴计算3D穿透矢量.我已经实现了SAT并且它有效.我想计算我需要将第一个盒子与其他盒子相互抵消,以便它始终位于其他盒子之上.有点做简单的盒子与非常长的箱子.

我应该如何继续寻找将一个物体推向指定轴方向的偏移量.

《碰撞 – 分离轴定理MVT只沿一个轴》

最佳答案 你应该已经知道了第一部分;当你将每个形状投影到每个轴上时,形状A应该有一些最小和最大标量值,比方说AMIN和AMAX,形状B(BMIN / BMAX)相同.

如果物体明显在轴上碰撞,它们的投影将重叠,这意味着AMIN< BMIN< AMAX< BMAX或BMIN< AMIN< BMAX< AMAX.让我们假设第一个. AMAX-BMIN的值是移动任一形状以使其与触摸接触所需的距离,并且被测试的轴为您提供方向. 通常,当一个遍历所有轴时,一个跟踪最小值及其对应的轴,并且这将成为解除形状所需的向量. (如果你想谷歌,通常称为’最小位移矢量’.) 对于您来说,想要在特定方向上移动它们,您只需存储与该特定轴对应的值,然后该变量将成为您的位移矢量(然后将其添加到一个形状的位置以将它们分开). 我强烈推荐谷歌搜索“最小位移矢量坐”并查看前几个链接,特别是这一个:http://www.dyn4j.org/2010/01/sat/.它有点密集,但它是我学习SAT所知的一切.

编辑和…我错过了一块.这有点粗糙,但如果您想要沿一个轴(在您的示例中为垂直)替换形状,基于从另一个轴(底部框的长边的法线)获得的位移矢量,您需要将位移矢量投影到所需(标准化)轴(使用点积)以获得适当的距离,然后与所需的轴组合.

点赞