我在三维空间中有两个位置向量:
Dim Position As Vector3
Dim Destination As Vector3
我还有一个旋转矢量,用于旋转对象。它包含Yaw,Pitch和Roll值(=>范围从0到PI * 2)
我现在希望此旋转矢量指向正确的方向,以便末尾的对象指向目标矢量,位于位置矢量。
我不知道怎么做到这一点。
答案 0 :(得分:0)
我做了3D东西已经有一段时间了,因此这只是一个概念性的答案。
您可以构造三个正交单位向量,并将它们组合为矩阵中的行。那个矩阵将是你的转变。你知道一个载体......
forward = to_point - from_point
现在您需要一个“向上”和“向右”向量,可以使用跨产品计算,前提是您有某种世界参考向量(否则您的解决方案空间是无限的)。例如,应该定义“向上”向量。
这确实意味着如果你的“向前”向量与你的“向上”向量过于平行,你的解决方案可能会受到万向节锁定的影响。在这种情况下,交叉产品会出现非常小(或零),一切都会破裂。那只是因为你试图解决一个具有两个自由度的系统,并使用一个假设来填补其中一个。
总之...
right = forward cross up
然后你可以修复向上矢量:
up = right cross forward
上述跨产品操作的顺序假设是右手系统。如果你的世界是左撇子,那么就颠倒两个被交叉的向量的排序。
所以,现在你有三个正交向量来表示你的对象的变换。将这些打成矩阵。行(或列,取决于应用矩阵的等式的哪一侧)将取决于您如何定义坐标系。我以前X是正确的,Y是向前的,Z是向上的。
现在您拥有对象的“中性”旋转矩阵,您可以使用标准矩阵变换对其应用普通的俯仰,滚转和偏航旋转。实际上,您可以通过将俯仰,滚动和偏航应用于单位矩阵来构造“局部”旋转矩阵,然后将其与您之前构造的矩阵相乘。