0

谁能帮我解决这个问题

我希望能够围绕静止的 3D 对象旋转 3D 对象。好吧,不会涉及任何运动,因为我只想在游戏开始后在它们的位置绘制对象,然后它们将在游戏的剩余时间内保持在那里。

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

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

Matrix.CreateRotationY(Rotation) 
4

2 回答 2

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
于 2012-04-29T14:27:05.600 回答
1

如果你不需要一次旋转超过 2 个角度,你可以使用基本的欧拉方法。看 :

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

这是一种很难的数学方法......但它有效..如果你想要围绕多个轴旋转,万向节锁定就会出现严重问题

于 2012-04-29T14:08:43.580 回答