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

标签 c++ vector matrix rotation direct3d

我需要根据方向 vector 计算旋转矩阵, 和来自旋转矩阵的方向 vector 。

向上方向应对应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);

现在, vector r 应该等于 v,但事实并非如此。 我究竟需要做什么才能获得我需要的结果?

最佳答案

这个问题让我有点困惑。使用方向 vector ,您可以定义无限旋转矩阵,使相机指向/注视该方向,除非您定义一些额外的约束。 根据您的代码,我假设您希望向上 vector 为 Z :-)

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

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

您正在创建一个观察矩阵,指定:

  • 相机位于v vector 的末尾,
  • 相机正朝向 [0 0 0]

您确定这是正确的,还是您正在寻找相反的东西?

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

关于c++ - 来自 Vector 的 Direct3D 旋转矩阵,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12874087/

相关文章:

c++ - 错误 : No matching function found

c++ - 在 Cygwin 下构建 MySQL++ 无法找到 MySQL 客户端库

C++ vector 迭代错误

sql - 将文件中的矩阵加载到 PostgreSQL 表中

python - 协助矩阵求常数次方

c++ - 如何确定 valgrind/callgrind 终止进程的原因

c++ - 通过消除持续运动进行运动检测

c++ - 如何在字符串数组中存储更多数量的字符串

python - 比较直方图中的两个向量

r - 创建指标