D3DXMatrixRotationAxis旋转错误的轴

时间:2018-06-24 01:34:18

标签: c++ d3dx

我正在用DirectX编写简单的3d应用程序。我是新手,但我想我了解D3DX旋转的工作原理。 创建大肠杆菌检测功能时,我注意到球弹向了错误的方向。代码应更改“方向”向量中给定的轴方向。而是更改其他两个:

speed = D3DXVECTOR3(1.0f, 2.0f, 3.0f);
direction = D3DXVECTOR3(1.0f, 0.0f, 0.0f);
D3DXMATRIX temp;

D3DXMatrixRotationAxis(&temp, &direction, 3.14f);
D3DXVec3TransformCoord(&speed, &speed, &temp);

从断点开始,我知道速度从1,2,3变为:

  • _D3DVECTOR {x = 0.999999762 y = -2.00477481 z = -2.99681091} _D3DVECTOR

我在这里做错了什么?想法是反转方向矢量中指定的轴。

1 个答案:

答案 0 :(得分:0)

您已经创建了绕X轴旋转180度的变换。 在(1,2,3)上进行运算得到的结果是您指定的(1,-2,-3)。

用具有法线N的平面“弹跳”您的“速度” S矢量:

angle = acos(S*N);   // provided that * is an operator for D3DXVec3Dot
axis = S^N;          // provided that ^ is an operator for D3DXVec3Cross
D3DXMatrixRotationAxis(&temp, &axis , angle*2);   // angle is *2
D3DXVec3TransformCoord(&S, &S, &temp);
S=-S;                                             // negate direction