2009-11-09 25 views
0

我想让一个非常简单的对象围绕3dspace中的一个固定点旋转。在directx中使物体轨道成为固定点?

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

我已经根据当天的比赛时间计算了我的角度。

但是我如何将这个角度应用到位置,所以它会旋转?

:(?

对不起即时通讯相当新的到DirectX。

回答

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可能会更好,因为翻译调用中的第三个参数可能更好)。最后一行将这两个矩阵相乘。矩阵乘法不可交换(即M1 * M2!= M2 * M1)。上面所做的是将物体orbitRadius单位沿着Z轴移动,然后围绕点(0,0,0)旋转。您可以考虑旋转握在手中的物体。如果orbitRadius是从肘部到手部的距离,那么围绕肘部的任何旋转(在0,0,0处)将通过空气形成弧线。

我希望有帮助,但我真的会建议在线性代数上进行一些认真的阅读。越多你知道这样更容易的问题将是解决自己:)

+0

这工作:)这只是非常临时的。这不是我的编程专业领域。当我们的一位开发人员生病时,我只是在帮忙。 – UberJumper 2009-11-09 21:56:21

+0

够公平的。我发现它是一个非常吸引人的数学领域,它具有从图形计算,到音频处理,甚至DNA分析等无限可能性。 – Goz 2009-11-09 22:07:47

+0

鉴于标准的DirectX世界坐标空间,我认为围绕Z旋转将更像你想。 – 2009-11-10 02:36:28