来自Vector的Direct3D旋转矩阵,反之亦然

时间:2012-10-13 14:33:08

标签: c++ vector matrix rotation direct3d

我需要从方向矢量计算旋转矩阵, 和来自旋转矩阵的方向向量。

向上方向应对应于z轴, forward是y,right是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 ,但它不是。 我到底需要做些什么来获得我需要的结果?

1 个答案:

答案 0 :(得分: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]