Direct3D旋转矩阵来自矢量,反之亦然
Direct3D Rotation Matrix from Vector and vice-versa
我需要根据方向向量计算旋转矩阵,以及来自旋转矩阵的方向矢量。
向上方向应当对应于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
);
您正在创建一个查看矩阵,指定:
- 摄像机位于CCD_ 3矢量的末端
- 摄像机正朝向
[0 0 0]
你确定这是对的,还是你在寻找相反的答案?
在第三个位置,将旋转矩阵应用于缩放的Y
基向量[0 length 0]
。如果希望旋转后的向量为v
,我认为应该将其应用于缩放后的X
基向量,而不是[len 0 0]
。
相关文章:
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 与互斥锁相比,旋转锁可以保证上下文切换
- 绘制旋转的三角形
- 旋转模型矩阵时的形状失真
- 四边形的 2D 旋转
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 在C++中,将int值赋给enum,反之亦然
- 发布旋转矩阵(openGL/glm)
- 顺时针迭代旋转 3 位数字
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何有效地计算将单位立方体映射到自身的反射和旋转?
- 如何在 c++ 中将所有大写字母转换为字符串中的小写字母,反之亦然?
- 子轴围绕父轴而不是他自己的轴旋转
- 将使用太多的纹理插值器 - 带旋转的着色器
- 将通用引用强制转换为可调用的 void 指针,反之亦然
- 用非原子更新原子变量,反之亦然
- 从向量到空指针的 memcpy(反之亦然)不起作用
- SFML 向下移动时如何围绕屏幕中心旋转?
- Direct3D旋转矩阵来自矢量,反之亦然