3D - 方向向量的旋转矩阵(向前,向上,向右)

时间:2012-06-25 14:01:46

标签: c++ vector 3d matrix directx

我需要从方向向量获取旋转矩阵(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轴旋转:

我想让代码围绕所有轴旋转。 这是我被迫使用的坐标系。我知道这很奇怪:

Coordinate System I'm using

这就是我稍后在代码中使用我的矩阵的方法:

XMStoreFloat3((XMFLOAT3*)&vStart, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vStart), xmTransformation));
XMStoreFloat3((XMFLOAT3*)&vEnd, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vEnd), xmTransformation));

1 个答案:

答案 0 :(得分: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);