【问题标题】:LookAt function观察功能
【发布时间】:2016-11-28 08:08:20
【问题描述】:

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

函数的工作方式是它接受实体和目标 位置并减去它们以获得一个反向向量。然后它计算 上向量和后向量的叉积得到 正确的向量。然后它计算右之间的叉积 向量和后向量得到一个与 方向和右向量,最后存储所有三个 在我们的旋转 Matrix3x3 内归一化的向量在它们各自的 行。

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

我想不通的是如何使一个对象与另一个对象面对相同的方向(并且希望是方向)。

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

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

【问题讨论】:

    标签: matrix lua 3d rotation


    【解决方案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。 但是您可以围绕任意轴旋转。那么当然你只需要一个角度。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 2017-06-04
      • 1970-01-01
      • 2018-01-14
      • 2023-04-06
      相关资源
      最近更新 更多