旋转

2012-04-29 74 views
0

谁能帮我这个请旋转

我希望能够绕固定的3D对象3D对象。那么将不会有任何移动,因为我只是想在游戏开始时在他们的位置绘制物体,然后他们会留在游戏的剩余部分。

例如说我有一个对象X是在三维空间中固定。然后我有另外两个对象,Y1和Y2。这两个物体都是静止的,不能移动。所有3个对象都在同一个x轴和y轴上。可以说X在(0,0,0)和Y1在(0,0,-50)。我想从Y1 45度角绕Y轴绘制Y2,但保持距离X.同样的距离

任何人都可以请建议这样做,请最好的方法? 我已经尝试了以下,但只是围绕其原点旋转对象。所以我想我必须围绕世界起源旋转它?这是如何完成的?

Matrix.CreateRotationY(Rotation) 
+0

我已经尝试了四元数旋转,但我根本无法得到这个工作。它借鉴了X模型原点,但每当我转动我的相机在屏幕上,看是否Y2已经旋转,它看起来像有绘制到屏幕上一个巨大的浮置面,也不管距离多远我尝试和变焦摄像机到看到它停留在同一个地方。所以,我只是想知道如果有一种不同的方法。如果你想要的东西对X,Y平面内旋转,我可以走,因为我已经打与四元... – heyred 2012-04-29 13:53:05

+0

砖墙,这是一个绕Z轴旋转。你需要调用'CreateRotationZ'。 – 2012-04-29 13:55:51

+0

哎呀对不起,没有那是我的错,也许,我肯定希望能够绕Y轴旋转。生病编辑帖子现在提及 – heyred 2012-04-29 14:02:52

回答

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 
+0

快速浏览一下,这看起来像我想要的。只需要清楚,计算完成后,Vector3 OrbitPos会成为我的Y2对象的新位置?另外,不需要音调,所以我可以在Matrix.CreateFromYawPitchRoll(Yaw,0,0)中将其设置为0。实际上,想一想,CreateFromYawPitchRoll()不是简单地围绕自己的轴旋转一个对象吗?没有接近我的dev的机器目前尝试的算法 – heyred 2012-04-29 14:48:32

+0

1)是的,这是一个最终POS.2)当然。 3)这个旋转矩阵(或任何)会围绕(0,0,0) – Blau 2012-04-29 15:05:18

+0

旋转对象感谢Blau的快速回复,现在我正在回家的路上,我很快尝试了它。再次感谢您的帮助 – heyred 2012-04-29 15:12:59

1

如果你不需要约200个多角度旋转一次,你可以使用基本的欧拉法。 看到:

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

那是一个数学方法艰难...但它的工作原理.. 只是如果你想围绕多个轴旋转,你将有严重的问题,万向节锁定

+0

谢谢我看看这个。是的,只是想围绕Y轴旋转,所以不需要担心万向节锁。我所需要做的就是将Y2设置在该位置,然后我将使用该位置进行其他计算。 – heyred 2012-04-29 14:15:09

+0

@hansmoolman 要更改旋转中心,只需将中心的坐标添加到基准坐标,执行旋转并减去中心的坐标 – akaltar 2012-04-29 16:26:10