2011-03-08 46 views
4

我正在使用Ox Engine在XNA中製作3D遊戲。幾乎沒有文件記錄,而且我一直倖存下來,但現在我已經在一段時間內遇到了合理的障礙,我認爲該是尋求外部幫助的時候了。第三人稱相機的y軸在播放器周圍不正確 - 邏輯問題?

所有的移動和鼠標外觀x工作和相機正常但是當我在Y軸上上下移動鼠標以使相機在其圍繞角色的圓圈「泡泡」中移動時,會導致其他所有內容出去同步。角色應該由相機繞行,但它也需要告訴角色面對的方向是。我似乎無法兼得。

當我的代碼從它告訴它的字符的方向和移動「離開」(轉),它的移動軌道本身:

 if (changeY > 0) 
     { 
      if (camMemory.Y > 110) 
       tempMatrix *= Matrix.CreateFromAxisAngle(model.Orientation.Left, MathHelper.ToRadians(changeY)); 
     } 
     else if (changeY < 0) 
     { 
      if (camMemory.Y < 400)//FAKE PLACEHOLDER VALUE... highest point in arc goes here 
       tempMatrix *= Matrix.CreateFromAxisAngle(model.Orientation.Left, MathHelper.ToRadians(changeY));  
     } 

     Vector3 camPos = new Vector3(0, 0, 0) ; 
     camMemory = tempMatrix.Translation; 

     //NOTE: this is the piece that causes the "bubble" to move 
     moveAmount = tempMatrix.Forward * 200f; 
     ///// 
     tempMatrix.Translation += moveAmount; 
     camPos = tempMatrix.Translation + model.Position; 

     //Pointer in front, Camera behind, make camera face pointer. 



     Engine.Camera.SetTransformByLookTarget(camPos, model.Orientation.Up, trackPos); 

這意味着,通過不恰當當他轉動照相機時,將圍繞人物繞行。

然而,當我解決這個問題,我沒有足夠遠從字符有一個適當的視圖,並在tempMatrix.Translation簡單地乘以「擴大」的「泡沫」使我受到嚴重出來的地方。我缺乏頓悟。任何見解將不勝感激。

TL,博士:如何讓我周圍的字符大而不移動中心點的軌道攝像機泡沫(轉不工作或我使用它錯了!)

編輯我希望我可以把一個賞金這一點,笑

回答

3

字符應該由 相機送入軌道,但它也需要被告知 什麼方向性格 面臨。我似乎無法兼得。

讓它們同時使用的方法是根據角色矩陣基矢量的偏移來設置相機位置。這樣當角色旋轉並改變一個基本矢量時,你的相機就會跟着它。在同時或獨立的情況下,更改偏移值將使您的相機也跟蹤角色。

看起來你的代碼只是圍繞模型的X軸進行軌道運行。爲了證明有關軸的方法,你可以做這樣的事情:

Vector3 offset = Vector3.Transform(model.Orientation.Backward, Matrix.CreateFromAxisAngle(model.Orientation.Left, camMemory.Y)); 

camPos = model.Position + (offset * bubbleSize); 

所以,現在,如果人物對自己的轉動,相機將跟隨,因爲model.Orientation.Backward將發生變化。但是,如果camMemory.Y發生變化(我假設這是鍵入輸入),相機將自行繞行。

請注意縮放偏移矢量如何影響「氣泡」大小。

+0

立即嘗試此操作.. – Remm 2011-03-10 22:01:43

+0

劃傷所有我將繼續嘗試此操作,您的代碼完全破壞了我的x軸移動,但是修復了它;現在看看它是否可以用來使y軸工作... – Remm 2011-03-11 00:28:46

+0

嗯,最後這讓我面臨同樣的問題,除了泡沫翻譯在他面前而不是後面*笑* – Remm 2011-03-11 01:22:44