2013-07-16 78 views
1

我需要幫助定位3D中的矩陣!使用XNA在3D中定位矩陣

大家好!我對編程並不陌生,但我是3D編程的新手。

在我的代碼中,我有一個視圖矩陣。視圖的目標始終是(0,0,0)。我也有一個臨時矩陣,它控制着攝像機(我把它放在了視圖矩陣的CreateLookAt方法中)。

這個理論有效,但並不如我預期的那樣。我可以成功地在立方體周圍(左側和右側)旋轉相機,甚至可以俯仰(上下)工作。但是,當我想要向左或向右旋轉,而相機被投射(正在看對象的頂部)或向下(從下面看對象)時,會出現我的問題。它「滾動」物體。如果照相機的行爲就像目標物體沒有頂部或底部一樣,我希望它。如果我將攝像機向上推,然後向右推,攝像機應圍繞我的物體旋轉,而不是在其上滾動。這很難解釋,因爲我的本地人不是英語。無論如何,如果你瞭解這些:D然後請回復。感謝名單。

 tempcam *= Matrix.CreateTranslation(tempcam.Forward * 20); 
     tempcam = Matrix.CreateFromYawPitchRoll(MathHelper.ToRadians((float)yangle),MathHelper.ToRadians((float)zangle), 0); 
     tempcam *= Matrix.CreateTranslation(tempcam.Backward * 20); 
     cameraposition = new Vector3(tempcam.M41, tempcam.M42, tempcam.M43); 
     view = Matrix.CreateLookAt(cameraposition, new Vector3(0, 0, 0), new Vector3(0, 1, 0)); 
+0

嘗試使用本相機:http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Arcball它將像Blender的相機一樣工作 –

+0

Blender的相機正是我想要避免的!您可以看到,無論您如何在攪拌機中旋轉相機,它總是會像您正在創建的模型具有頂部和底部一樣。 –

回答

0

如何如下:

view = Matrix.CreateRotationY(yangle) * 
     Matrix.CreateRotationX(xangle) * 
     Matrix.CreateTranslation(Vector3.Backward * 20.0f); 
+0

這也會創建滾動。但是,考慮編輯您的答案以在偏航旋轉之前放置俯仰旋轉,然後不會產生搖擺。這是我前段時間用來展示原因的視頻。 http://www.screencast.com/users/sh8zen/folders/Xna/media/929e0a9a-16d1-498a-b777-8b3d85fd8a00 –

+0

也許你正在考慮第一人稱相機而不是固定目標相機? – gareththegeek

+0

我並沒有特別想到任何類型的相機,只是單單看着你的代碼。每當你圍繞世界Y軸旋轉,然後圍繞世界X軸旋轉時,第二次旋轉將同時具有局部X和局部Z(滾動)旋轉分量,這將導致滾動的出現。我不是積極的,這是OP的確切問題,但如果它是,你的代碼會回答它,如果你扭轉旋轉的順序。 –

0

好了,無奈了幾個小時之後,我放棄了與「攪拌機」式的相機去了。它工作完美。我離開了XNA並嘗試了新的統一引擎。在統一的情況下,我獲得了比XNA更高的成就。無論如何感謝大家的回覆,我感謝他們,他們真的很有幫助。我會給一個UP標誌,但我沒有足夠的代表。如果有人可以關閉此線程,請執行此操作。