我试图让一个非常简单的物体围绕3dspace中的一个固定点旋转。
基本上我的对象是从单个D3DXVECTOR3创建的,它表示对象的当前位置,相对于单个常量点。让我们说0,0,0。
我已根据当天游戏时间的当前值计算出我的角度。
但是如何将该角度应用于该位置,以便它会旋转?
:(
对不起,我对Directx很新。
答案 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处)将通过空气形成弧形。
我希望有所帮助,但我真的建议你对线性代数进行一些认真的阅读。你知道的越多,这样的问题就越容易解决:)