C++ 矢量的Direct3D旋转矩阵,反之亦然
我需要从一个方向向量计算一个旋转矩阵, 以及来自旋转矩阵的方向向量 向上方向应与z轴相对应, 向前是y,向右是xC++ 矢量的Direct3D旋转矩阵,反之亦然,c++,vector,matrix,rotation,direct3d,C++,Vector,Matrix,Rotation,Direct3d,我需要从一个方向向量计算一个旋转矩阵, 以及来自旋转矩阵的方向向量 向上方向应与z轴相对应, 向前是y,向右是x D3DXMATRIX m; // the rotation matrix D3DXVECTOR3 v; // this is the direction vector wich is given D3DXVECTOR3 r; // resulting direction vector float len = D3DXVec3Length(&v
D3DXMATRIX m; // the rotation matrix
D3DXVECTOR3 v; // this is the direction vector wich is given
D3DXVECTOR3 r; // resulting direction vector
float len = D3DXVec3Length(&v); // length of the initial direction vector
// compute matrix
D3DXMatrixLookAtLH(&m, &v, &D3DXVECTOR3(0,0,0), &D3DXVECTOR3(0,0,1));
// use the matrix on a vector { 0, len, 0 }
D3DXVec3TransformCoord(&r, &D3DXVECTOR3(0,len,0), &m);
现在,向量r应该等于v,但它不是。
我到底要做什么才能得到我需要的结果?这个问题让我有点困惑。使用方向向量,可以定义无限旋转矩阵,使摄影机指向/注视该方向,除非定义其他约束。 基于您的代码,我将假设您希望上方向向量为
Z
:-)
首先,要小心:看起来您描述的是右手坐标系,但使用的是左手函数D3DXMatrixLookAtLH。
第二,该函数的参考说明:
D3DXMATRIX* D3DXMatrixLookAtLH(
_Inout_ D3DXMATRIX *pOut,
_In_ const D3DXVECTOR3 *pEye,
_In_ const D3DXVECTOR3 *pAt,
_In_ const D3DXVECTOR3 *pUp
);
您正在创建一个外观矩阵,指定:
- 摄像机位于
矢量的末端v
- 摄像机正朝着
[0]
Y
基向量[0长度0]
。如果希望旋转向量为v
,我认为应该将其应用于缩放的X
基向量