2016-07-25 250 views
0

此页面https://goocreate.com/learn/everything-you-always-wanted-to-know-about-rotation/描述了一个函数'LookAt',因为它能够旋转3D对象以面对另一个对象。的注视功能的内部动作进行说明(但在代码中未列出),为:LookAt函数

功能的工作原理是,它需要的实体和目标 位置并减去它们,以得到一个背面向量。然后它计算向上矢量和后向矢量之间的交叉乘积以得到右侧矢量 。然后它计算右边的向量和后向量之间的叉积,得到一个向上的向量,这个向量与方向和向右的向量正交,最后存储在我们的旋转矩阵3x3内在它们各自的 行中归一化的所有三个 向量。

我想复制这个没有3D功能库来帮助我。我有3D矢量减法,矩阵乘法,点和交叉乘积函数。 (我在Lua编码)

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

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

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

回答

-1

首先:

你不能把一个对象转换成特定的方向,如果对象没有一个方向。 所以你要么必须知道定义对象方向的矢量,要么你必须自己定义一个矢量。

的注视功能的内部动作进行说明(但在不代码列出 )为:

这是不正确的。他们链接了包含阅读文章时可能会想到的问题的FAQ。 (!更多精心

的为您提供以下信息:

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。 但是你可以围绕任何轴旋转。那么当然你只需要一个角度。

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