c++ - 3D - 来自方向 vector (向前、向上、向右)的旋转矩阵

标签 c++ vector 3d matrix directx

我需要从方向 vector (vForward) 获取旋转矩阵 我还有 vRight 和 vUp vector 。所有这些 vector 都是单位 vector 。

我只需要得到旋转矩阵。

要获得仅在一个平行于地面的平面 (xy) 中旋转的旋转矩阵,我这样做: XMMATRIX xmResult;

Vec3f vFwd = pPlayer->VForward;
vFwd.z = 0;
vFwd.Normalize();

xmResult = XMMatrixSet( vFwd.y,     -vFwd.x,    0,      0,
    vFwd.x,      vFwd.y,    0,      0,
    0,          0,          1,      0,
    0,          0,          0,      1);

以上代码只获取旋转矩阵绕Z轴旋转:

我想让代码围绕所有轴旋转。 这是我被迫使用的坐标系。我知道这很奇怪:

Coordinate System I'm using

这就是我稍后在代码中使用矩阵的方式:

XMStoreFloat3((XMFLOAT3*)&vStart, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vStart), xmTransformation));
XMStoreFloat3((XMFLOAT3*)&vEnd, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vEnd), xmTransformation));

最佳答案

根据您使用矩阵的方式,Right、Up 和 Forward 应对应于矩阵的行或列。

xmResult = XMMatrixSet( vRight.x, vRight.y, vRight.z, 0, vFwd.x, vFwd.y, vFwd.z, 0, vUp.x, vUp.y, vUp.z, 0, 0, 0, 0, 1);

关于c++ - 3D - 来自方向 vector (向前、向上、向右)的旋转矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190786/

相关文章:

c++ - 如何让最小化和最大化按钮出现在 wxDialog 对象上

c++ - 使用 == 运算符搜索 vector

c++ - 根据条件语句删除循环中的 vector 元素

c++ - 使用变量索引对 vector 的 vector 进行排序

python - 如何使用 pybind11 将 python 函数转换为 std::function

c++ - 制作 QGraphicsPixmapItem 动画的最简单方法?

java - 滚动 3d 球的旋转

javascript - 如何在浏览器中使用 WebGL 实现 FPS View ?

javascript - T 形图中同一 Canvas 上的多个图形

c++ - 原始输入鼠标 - 未收到数据