0

我需要从方向向量计算旋转矩阵,从旋转矩阵计算方向向量。

向上方向应对应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,但它不是。我到底要做什么才能得到我需要的结果?

4

1 回答 1

1

这个问题对我来说有点令人困惑。使用方向向量,您可以定义无限旋转矩阵,使相机指向/查看该方向,除非您定义了一些额外的约束。根据您的代码,我将假设您希望向上向量为Z:-)

首先,请注意:您似乎在描述右手坐标系,但使用的是左手函数D3DXMatrixLookAtLH。其次,此功能的参考资料表明:

D3DXMATRIX* D3DXMatrixLookAtLH(
  _Inout_  D3DXMATRIX *pOut,
  _In_     const D3DXVECTOR3 *pEye,
  _In_     const D3DXVECTOR3 *pAt,
  _In_     const D3DXVECTOR3 *pUp
);

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

  • 相机位于v向量的末端,
  • 相机正在看[0 0 0]

您确定这是正确的,还是您可能正在寻找相反的结果?

第三,您将旋转矩阵应用于缩放的Y基向量[0 length 0]。如果您想要旋转矢量v,我认为您应该将其应用于缩放的X基矢量[len 0 0]

于 2012-10-13T14:59:44.240 回答