我想调整矩阵的方向,使上方向向量与另一个方向相同。向前和向右向量的方向无关紧要。
例如:

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

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

最佳答案

这是一个轮换问题,这是婚姻特别有用的
首先,将矩阵拆分为三个分量向量(向上、向前和向右)。
将设置向量设置为所需的值。然后,调整你的前向和右向向量,使它们成直角,一个简单的方法就是使用交叉积。
例如:

//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);

在那之后,把你的向量插回矩阵中,然后开始。

关于c - 旋转矩阵,使Up vector 等于另一个 vector ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4898987/

10-11 22:05