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); // 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
);

您正在创建一个查看矩阵,指定:

  • 摄像机位于CCD_ 3矢量的末端
  • 摄像机正朝向[0 0 0]

你确定这是对的,还是你在寻找相反的答案?

在第三个位置,将旋转矩阵应用于缩放的Y基向量[0 length 0]。如果希望旋转后的向量为v,我认为应该将其应用于缩放后的X基向量,而不是[len 0 0]

最新更新