旋轉

2012-04-29 99 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