Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 矢量的Direct3D旋转矩阵,反之亦然_C++_Vector_Matrix_Rotation_Direct3d - Fatal编程技术网

C++ 矢量的Direct3D旋转矩阵,反之亦然

C++ 矢量的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

我需要从一个方向向量计算一个旋转矩阵, 以及来自旋转矩阵的方向向量

向上方向应与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
);
您正在创建一个外观矩阵,指定:

  • 摄像机位于
    v
    矢量的末端
  • 摄像机正朝着
    [0]
你确定这是对的,还是你在寻找相反的答案

第三,将旋转矩阵应用于缩放的
Y
基向量
[0长度0]
。如果希望旋转向量为
v
,我认为应该将其应用于缩放的
X
基向量