围绕一个点旋转

时间:2012-04-29 13:33:36

标签: c# xna rotation rotational-matrices

任何人都可以帮我这个吗

我希望能够围绕固定的3D物体旋转3D物体。好吧,不会涉及任何动作,因为我只想在游戏开始后在他们的位置绘制物体,然后他们将在游戏的剩余时间内保留在那里。

比方说,我有一个在3D空间中静止的物体X.然后我有另外两个对象,Y1和Y2。这两个物体都是静止的,不能移动。所有3个对象位于相同的x和y轴上。假设X在(0,0,0),Y1在(0,0,-50)。我想从Y轴绕Y轴以45度角绘制Y2,但保持与X的距离相同。

有人可以建议这样做的最好方法吗? 我尝试了以下但只是围绕其原点旋转对象。所以我想我必须围绕世界起源旋转它?这是怎么做到的?

Matrix.CreateRotationY(Rotation) 

2 个答案:

答案 0 :(得分:2)

我不确定你想要什么,但这是一种将一个物体绕另一个旋转的方法:

  Vector3 Origin;     // Stationary Object

  float Yaw, Pitch;   // Angles 

  float Distance;     

  Vector3 OrbitOffset = Vector3.UnitX * Distance;

  // Other approach that consider the initial pos of the object to rotate
  // Vector3 OrbitOffset = OrbitPos - Origin;       

  Matrix Rotation = Matrix.CreateFromYawPitchRoll(Yaw, Pitch, 0);

  Vector3.Transform(ref OrbitOffset, ref Rotation, out OrbitOffset);

  Vector3 OrbitPos = Origin + OrbitOffset;  // Final position of the rotated object

答案 1 :(得分:1)

如果您不需要一次旋转超过2个角度,您可以使用基本的Euler方法。 见:

http://en.wikipedia.org/wiki/Rotation_matrix#Basic_rotations

这是一种难以理解的数学方法......但它确实有效...... 如果你想围绕多个轴旋转,你会遇到严重的万向节锁定问题