Hoo*_*och 5 c++ directx 3d vector matrix
我需要从方向向量获得旋转矩阵(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);
Run Code Online (Sandbox Code Playgroud)
上面的代码只能让旋转矩阵围绕Z轴旋转:
我想让代码围绕所有轴旋转.这是我被迫使用的坐标系.我知道这很奇怪:
这就是我稍后在代码中使用我的矩阵的方式:
XMStoreFloat3((XMFLOAT3*)&vStart, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vStart), xmTransformation));
XMStoreFloat3((XMFLOAT3*)&vEnd, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vEnd), xmTransformation));
Run Code Online (Sandbox Code Playgroud)
根据您使用矩阵的方式,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);
Run Code Online (Sandbox Code Playgroud)