我需要从方向 vector (vForward) 获取旋转矩阵 我还有 vRight 和 vUp vector 。所有这些 vector 都是单位 vector 。
我只需要得到旋转矩阵。
要获得仅在一个平行于地面的平面 (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));
最佳答案
根据您使用矩阵的方式,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);
关于c++ - 3D - 来自方向 vector (向前、向上、向右)的旋转矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190786/