4

我在计算沿一个轴的 3D 穿透矢量时遇到问题。我已经实施了 SAT 并且它有效。我想计算我需要将第一个盒子从其他盒子中偏移多少,所以它总是位于其他盒子之上。一种用很长的盒子做简单的盒子投射。

我应该如何继续寻找将一个对象推向指定轴的方向的偏移量。

在此处输入图像描述

4

1 回答 1

1

您应该已经知道的第一部分;当您将每个形状投影到每个轴上时,形状 A 应该有一些最小和最大标量值,比如说AMINand AMAX,形状 B ( BMIN/ BMAX) 也是如此。

如果物体明显地在一个轴上碰撞,它们的投影将重叠,意味着要么AMIN < BMIN < AMAX < BMAX要么BMIN < AMIN < BMAX < AMAX。让我们假设第一个。

的值AMAX-BMIN是移动任一形状以使它们接触所需的距离,并且被测试的轴为您提供方向。

通常,当一个人遍历所有轴时,一个人会跟踪最小值及其对应的轴,这成为解除形状碰撞所需的向量。(如果你想用谷歌搜索它,通常称为“最小位移矢量”。)

对于您来说,想要将它们朝特定方向移动,您只需存储与该特定轴对应的值,这将成为您的位移矢量(然后将其添加到一个形状的位置以将它们分开)。

我强烈推荐谷歌搜索“最小位移矢量 sat”并查看前几个链接,特别是这个:http ://www.dyn4j.org/2010/01/sat/ 。它有点密集,但我在这里学到了我所知道的关于 SAT 的一切。

编辑而且...我错过了一块。这有点粗糙,但是如果您想根据从另一个轴(底部框长边的法线)获得的位移矢量沿一个轴(在您的示例中为垂直)移动形状,则需要将位移矢量投影到所需的(归一化)轴(使用点积)以获得适当的距离,然后与所需的轴相结合。

于 2016-09-28T20:42:08.570 回答