从方向向量(前、上、右)计算3D旋转矩阵

6

我需要从方向向量(vForward)获取旋转矩阵,同时我还有vRight和vUp向量。所有这些向量都是单位向量。

我只需要获取旋转矩阵。

要在仅限于与地面平行的一个平面(xy平面)中获得旋转矩阵,我这样做: XMMATRIX xmResult;

Vec3f vFwd = pPlayer->VForward;
vFwd.z = 0;
vFwd.Normalize();

xmResult = XMMatrixSet( vFwd.y,     -vFwd.x,    0,      0,
    vFwd.x,      vFwd.y,    0,      0,
    0,          0,          1,      0,
    0,          0,          0,      1);

上述代码只能获得绕Z轴旋转的旋转矩阵:

我希望获得绕所有轴旋转的代码。 这是我被迫使用的坐标系。我知道它很奇怪:

我正在使用的坐标系

这是我在代码中如何使用我的矩阵:

XMStoreFloat3((XMFLOAT3*)&vStart, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vStart), xmTransformation));
XMStoreFloat3((XMFLOAT3*)&vEnd, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vEnd), xmTransformation));
1个回答

5
根据您的矩阵使用方式,Right、Up和Forward应与矩阵的行或列相对应。
xmResult = XMMatrixSet( vRight.x, vRight.y, vRight.z, 0, vFwd.x, vFwd.y, vFwd.z, 0, vUp.x, vUp.y, vUp.z, 0, 0, 0, 0, 1);

我完全不知道。这就是我得到的全部信息。数学不是我的强项。作为一名程序员,我需要计算几个位置。 - Hooch
这是我将使用该矩阵绘制线条的方式:XMStoreFloat3((XMFLOAT3*)&vStart, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vStart), xmTransformation)); XMStoreFloat3((XMFLOAT3*)&vEnd, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vEnd), xmTransformation)); - Hooch
谢谢。我会在几天内去书店买一本。 - Hooch
1
尝试交换行的顺序。 - Andreas Brinck
我的程序使用了列 r,u,f。感谢你提供了解决旋转问题的方案,给你一个赞。 - GraphicsMuncher
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接