此页面https://goocreate.com/learn/everything-you-always-wanted-to-know-about-rotation/将函数“LookAt”描述为能够旋转一个3D对象以面对另一个对象。LookAt函数的内部操作描述为(但未在代码中列出)如下:
函数的工作方式是,它获取实体和目标位置,并减去它们以获得回矢量。然后计算向上向量和后向向量之间的交叉积,得到正确的向量。然后计算右向量和后向量之间的交叉积,得到一个既与方向正交又与右向量正交的向上向量,最后将归一化的三个向量存储在旋转Matrix3x3中各自的行中。
我试图复制这个没有3D函数库来帮助我。我有三维矢量减法,矩阵乘法,点和交叉乘积功能。(我在用Lua编码。)
我想不出的是,如何使一个对象与另一个物体面对相同的方向(希望是方向)。
我读过,这只是建立一个基于角度的旋转矩阵的问题,但是我找到的所有关于三维完成中的角度的东西,只返回一个角度--我认为会有3个角度--每个平面一个角。
如何构造这个旋转矩阵?我不知道我的对象面临哪个方向,这就是为什么计算对象的当前x,y,z角的问题是一个问题。我想我需要的是一个函数来确定一个物体的三维角度,并把它转换成另一个物体的旋转矩阵。
发布于 2016-07-25 16:09:21
首先:
如果对象没有定向,则不能将对象转换为特定的方向。所以你要么必须知道定义对象方向的向量,要么你必须自己定义一个。
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。但你可以绕任意轴旋转。当然,你只需要一个角度。
获取一本关于线性代数的教科书,或者浏览网页上的教程和示例。确保你明白自己在做什么。它将帮助您解决未来的问题,没有示例代码。这是简单的数学:)
https://stackoverflow.com/questions/38560018
复制相似问题