【问题标题】:Rotate matrix so Up vector equals another vector旋转矩阵,使上向量等于另一个向量
【发布时间】:2011-02-04 14:18:51
【问题描述】:

我想确定我的矩阵的方向,使其向上向量与另一个向量的方向相同。 Forward 和 Right 向量的方向无关紧要。

例如:

matrix4 m; // m.Up = 0, 1, 0
vector3 v = V3(1,0,0);

// Then I think I have to get the rotation from m.Up and v
// And then rotate the matrix accordingly

但我不知道该怎么做,我可能错了。

【问题讨论】:

  • 为此使用四元数。它是完成这项工作的正确工具。
  • 我认为可能有更快的方法,因为我不需要角度,只需要轴?

标签: c opengl matrix rotation


【解决方案1】:

这是矩阵特别有用的旋转问题之一

首先,将矩阵拆分为三个分量向量(上、前和右)。

将您的向上向量设置为您想要的。然后,调整前向和右向向量,使它们成直角,一个简单的方法是使用叉积。

例如:

//Gets a perpendicular vector
V3 V3::Perp() {
    V3 perp = v.Cross(NewV3(-1, 0, 0));
    if(perp.Length() == 0) {
        // If v is too close to -x try -y
        perp = v.Cross(NewV3(0, -1, 0));
    }
    return perp.Unit();
}
//up = Whatever you need
forward = up.Perp()
right = cross(up, forward);

之后,将向量重新插入矩阵,瞧:D。

【讨论】:

    【解决方案2】:

    如果我理解正确,只需将矩阵中的向上轴设置为您选择的向量。正如您所说的,前向和右向向量无关紧要,只要它们与新的上轴正交,就可以将它们设置为任何值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多