此页面https://goocreate.com/learn/everything-you-always-wanted-to-know-about-rotation/将函数“LookAt”描述为能够旋转3D对象以面向另一个对象。 LookAt函数的内部操作描述为(但未在代码中列出):
该功能的工作方式是它采用实体和目标 位置并减去它们以获得后向量。然后计算 上向量和后向量之间的交叉乘积得到 正确的向量。然后计算右边的叉积 向量和后向量,以获得正交的向上矢量 方向和右向量,最后存储所有三个 矢量在我们的旋转Matrix3x3内部归一化 行。
我试图在没有3D功能库的情况下复制它来帮助我。我有3d矢量减法,矩阵乘法,点和交叉乘积函数。 (我在Lua编码。)
我无法弄清楚的是如何使一个物体朝向与另一个物体相同的方向(并且希望是方向)。
我已经读到这只是基于角度创建旋转矩阵的问题,但是我发现通过返回单个角度来讨论3D中的角度的所有内容 - 我认为会有3个角度 - 一个用于每架飞机。
如何构建此旋转矩阵?我不知道我的物体面向哪个方向,这就是为什么计算物体的当前x,y,z角度的问题是个问题。我认为我需要的是一个确定物体当前三维角度的函数,以及将其转换为另一个物体的旋转矩阵的方法。
答案 0 :(得分:-1)
首先:
如果对象没有方向,则无法将对象转换为特定方向。 因此,您必须知道定义对象方向的向量,或者您必须自己定义一个。
描述了LookAt函数的内部操作(但不是 在代码中列出):
事实并非如此。他们链接了一个常见问题解答,其中包含您在阅读本文时可能会想到的问题。 (仔细阅读!)
为您提供以下信息:
What is the algorithm behind lookAt inside Matrix3x3:
The abbreviated algorithm is:
z.set(back_direction).normalize();
x.set(up).cross(z).normalize();
y.set(z).cross(x);
m[0] = x[0];
m[1] = x[1];
m[2] = x[2];
m[3] = y[0];
m[4] = y[1];
m[5] = y[2];
m[6] = z[0];
m[7] = z[1];
m[8] = z[2];
关于角度数的问题:
如果围绕3轴旋转,则只需要3个角度。例如,x,y,z。 但您可以围绕任意轴旋转。当然,你只需要一个角度。
获取有关线性代数的教科书或浏览网页以获取教程和示例。确保你明白自己在做什么。它将帮助您解决未来的问题,而无需示例代码。这是简单的数学:)