我在计算沿一个轴的 3D 穿透矢量时遇到问题。我已经实施了 SAT 并且它有效。我想计算我需要将第一个盒子从其他盒子中偏移多少,所以它总是位于其他盒子之上。一种用很长的盒子做简单的盒子投射。
我应该如何继续寻找将一个对象推向指定轴的方向的偏移量。
我在计算沿一个轴的 3D 穿透矢量时遇到问题。我已经实施了 SAT 并且它有效。我想计算我需要将第一个盒子从其他盒子中偏移多少,所以它总是位于其他盒子之上。一种用很长的盒子做简单的盒子投射。
我应该如何继续寻找将一个对象推向指定轴的方向的偏移量。
您应该已经知道的第一部分;当您将每个形状投影到每个轴上时,形状 A 应该有一些最小和最大标量值,比如说AMIN
and AMAX
,形状 B ( BMIN
/ BMAX
) 也是如此。
如果物体明显地在一个轴上碰撞,它们的投影将重叠,意味着要么AMIN < BMIN < AMAX < BMAX
要么BMIN < AMIN < BMAX < AMAX
。让我们假设第一个。
的值AMAX-BMIN
是移动任一形状以使它们接触所需的距离,并且被测试的轴为您提供方向。
通常,当一个人遍历所有轴时,一个人会跟踪最小值及其对应的轴,这成为解除形状碰撞所需的向量。(如果你想用谷歌搜索它,通常称为“最小位移矢量”。)
对于您来说,想要将它们朝特定方向移动,您只需存储与该特定轴对应的值,这将成为您的位移矢量(然后将其添加到一个形状的位置以将它们分开)。
我强烈推荐谷歌搜索“最小位移矢量 sat”并查看前几个链接,特别是这个:http ://www.dyn4j.org/2010/01/sat/ 。它有点密集,但我在这里学到了我所知道的关于 SAT 的一切。
编辑而且...我错过了一块。这有点粗糙,但是如果您想根据从另一个轴(底部框长边的法线)获得的位移矢量沿一个轴(在您的示例中为垂直)移动形状,则需要将位移矢量投影到所需的(归一化)轴(使用点积)以获得适当的距离,然后与所需的轴相结合。