我正在用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变为:
我在这里做错了什么?想法是反转方向矢量中指定的轴。
答案 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