Matrix 是否可以在不使用四元数的情况下设置矩阵的z旋转?

Matrix 是否可以在不使用四元数的情况下设置矩阵的z旋转?,matrix,linear-algebra,Matrix,Linear Algebra,我想用鼠标旋转我的3D相机 因为我不能做一个不使用四元数的框架锁定的lookAt函数,所以我分别旋转右轴和上轴 然而,这使得矩阵也沿着它的前轴旋转,这是我不想要的行为 为了避免这种情况,我尝试创建一个函数,将右轴的y值设置为0,但我的尝试只会导致矩阵在进一步旋转时变得更加模糊 所以我的问题是,是否有可能做到这一点? 我用的是一个左手矩阵,其中x是右的,y是向上的,z是向前的 这是C++中的一个例子,所以你可以看到我要做的: void RemoveZRotation(Matrix44& m

我想用鼠标旋转我的3D相机

因为我不能做一个不使用四元数的框架锁定的lookAt函数,所以我分别旋转右轴和上轴

然而,这使得矩阵也沿着它的前轴旋转,这是我不想要的行为

为了避免这种情况,我尝试创建一个函数,将右轴的y值设置为0,但我的尝试只会导致矩阵在进一步旋转时变得更加模糊

所以我的问题是,是否有可能做到这一点? 我用的是一个左手矩阵,其中x是右的,y是向上的,z是向前的

这是C++中的一个例子,所以你可以看到我要做的:

void RemoveZRotation(Matrix44& matrix)
{
    Vector3 right = matrix.GetRight();
    right.y = 0;
    right.Normalize();

    Vector3 up = right.Cross(matrix.GetForward());
    up.Normalize();

    matrix[0] = right.x;
    matrix[1] = right.y;
    matrix[2] = right.z;

    matrix[4] = up.x;
    matrix[5] = up.y;
    matrix[6] = up.z;
}

旋转矩阵包含作为列的局部x、y和z向量的方向。因此,不要修改一个3D旋转,只生成一个包含两个旋转的新旋转,正如你所说的矩阵包含方向,但据我所知,旋转值本身必须进行计算。所以我可以创建一个有两个方向的矩阵,但不能旋转。也许我在这里遗漏了一些东西,但我不知道该怎么做。我不确定你在这里做什么,但你可能也对@Ericinlsson感兴趣是的,如果局部(眼睛)坐标有方向向量x,y和z,那么旋转矩阵就是
R=[xyz]
。是的,我同意你的观点。我可以制作在一个轴上旋转的旋转矩阵,但不能同时在多个轴上旋转。当我组合两个独立的矩阵时,问题就出现了。如果有一个很好的方法来创建一个矩阵与2旋转一次,我很乐意知道。