首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LookAt函数

LookAt函数
EN

Stack Overflow用户
提问于 2016-07-25 05:00:08
回答 1查看 885关注 0票数 0

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

函数的工作方式是,它获取实体和目标位置,并减去它们以获得回矢量。然后计算向上向量和后向向量之间的交叉积,得到正确的向量。然后计算右向量和后向量之间的交叉积,得到一个既与方向正交又与右向量正交的向上向量,最后将归一化的三个向量存储在旋转Matrix3x3中各自的行中。

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

我想不出的是,如何使一个对象与另一个物体面对相同的方向(希望是方向)。

我读过,这只是建立一个基于角度的旋转矩阵的问题,但是我找到的所有关于三维完成中的角度的东西,只返回一个角度--我认为会有3个角度--每个平面一个角。

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

EN

回答 1

Stack Overflow用户

发布于 2016-07-25 16:09:21

首先:

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

LookAt函数的内部操作描述为(但未在代码中列出)如下:

这不是真的。他们联系一个常见问题,其中包含的问题,可能会出现在你的脑海中,当你阅读这篇文章。(仔细阅读!)

向您提供以下信息:

代码语言:javascript
运行
复制
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。但你可以绕任意轴旋转。当然,你只需要一个角度。

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38560018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档