在directx中使对象轨道成为固定点?

时间:2009-11-09 21:13:03

标签: c++ directx

我试图让一个非常简单的物体围绕3dspace中的一个固定点旋转。

基本上我的对象是从单个D3DXVECTOR3创建的,它表示对象的当前位置,相对于单个常量点。让我们说0,0,0。

我已根据当天游戏时间的当前值计算出我的角度。

但是如何将该角度应用于该位置,以便它会旋转?

:(

对不起,我对Directx很新。

1 个答案:

答案 0 :(得分:1)

你是在尝试绘制太阳还是月亮?

如果是这样,那么假设你的天体就像一个以(0,0,0)为中心点的球体。

将其旋转到位的最简单方法可能是执行以下操作

D3DXMATRIX matRot;
D3DXMATRIX matTrans;
D3DXMatrixRotationX( &matRot, angle );
D3DXMatrixTranslation( &matTrans, 0.0f, 0.0f, orbitRadius );
D3DXMATRIX matFinal = matTrans * matRot;

然后将该矩阵设置为您的世界矩阵。

它的作用是创建一个旋转矩阵,使物体绕XAxis旋转“角度”(即在Y-Z平面内);然后它创建一个矩阵,以0角度将其推出到适当的位置(orbitRadius可能会更好地作为转换调用中的第3个参数,具体取决于零点的位置)。最后一行将这两个矩阵相乘。矩阵乘法是非交换的(即M1 * M2!= M2 * M1)。上面做的是沿Z轴移动物体orbitRadius单位,然后围绕点(0,0,0)旋转。您可以考虑旋转手中握住的物体。如果orbitRadius是从肘部到手的距离,那么围绕肘部的任何旋转(在0,0,0处)将通过空气形成弧形。

我希望有所帮助,但我真的建议你对线性代数进行一些认真的阅读。你知道的越多,这样的问题就越容易解决:)