LookAt函数

时间:2016-07-25 05:00:09

标签: matrix lua 3d rotation

此页面https://goocreate.com/learn/everything-you-always-wanted-to-know-about-rotation/将函数“LookAt”描述为能够旋转3D对象以面向另一个对象。 LookAt函数的内部操作描述为(但未在代码中列出):

  

该功能的工作方式是它采用实体和目标   位置并减去它们以获得后向量。然后计算   上向量和后向量之间的交叉乘积得到   正确的向量。然后计算右边的叉积   向量和后向量,以获得正交的向上矢量   方向和右向量,最后存储所有三个   矢量在我们的旋转Matrix3x3内部归一化   行。

我试图在没有3D功能库的情况下复制它来帮助我。我有3d矢量减法,矩阵乘法,点和交叉乘积函数。 (我在Lua编码。)

我无法弄清楚的是如何使一个物体朝向与另一个物体相同的方向(并且希望是方向)。

我已经读到这只是基于角度创建旋转矩阵的问题,但是我发现通过返回单个角度来讨论3D中的角度的所有内容 - 我认为会有3个角度 - 一个用于每架飞机。

如何构建此旋转矩阵?我不知道我的物体面向哪个方向,这就是为什么计算物体的当前x,y,z角度的问题是个问题。我认为我需要的是一个确定物体当前三维角度的函数,以及将其转换为另一个物体的旋转矩阵的方法。

1 个答案:

答案 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。 但您可以围绕任意轴旋转。当然,你只需要一个角度。

获取有关线性代数的教科书或浏览网页以获取教程和示例。确保你明白自己在做什么。它将帮助您解决未来的问题,而无需示例代码。这是简单的数学:)