2012-08-31 25 views
2

我無法獲得正確的模型方向。在這個項目中,用戶加載3個DXF文件。模型的XNA方向

  • DXF 1是由3dfaces表示的模型。
  • DXF 2是3dpoly,代表相機在左側行駛的路徑。
  • DXF 3是3dpoly爲迎面而來的交通提供路徑。

前兩個數據集在C#/ XNA開發中正確處理。用戶可以使用上下鍵盤按鍵沿着道路行駛。但是我在第三個過程中失敗了。我無法確定迎面而來的交通方向是否正確。這個位置沒問題,每100米一輛貨車,但方向不對。

最奇怪的是將模型轉換到正確的位置和方向導致模型在相機上的正常方法!我哪裏做錯了?我已經可以在以下網址的源代碼,這樣你就可以查看代碼,看看我錯在哪裏(拉鍊包括用於測試的DXF文件):提前

http://www.4shared.com/zip/Lk3xmCtO

謝謝..凱文。

這是最不正確的部分:

Matrix worldMatrix = Matrix.CreateTranslation(VanPos[vi]); 
Matrix[] transforms = new Matrix[Van.Bones.Count]; 
Van.CopyAbsoluteBoneTransformsTo(transforms); 
foreach (ModelMesh modmesh in Van.Meshes) 
{ 
foreach (BasicEffect be1 in modmesh.Effects) 
{ 
    be1.World = transforms[modmesh.ParentBone.Index] * worldMatrix; 

這導致模型被放置在攝像頭位置。 只使用CreateTranslation將模型放置在正確的位置,但方向不正確。

+0

http://dc617.4shared.com/img/ZZaacc6f/s2/0.6480764457213543/opposite.png – zeppeldep

+0

你真的應該在代碼中包含代碼的相關部分,而不是鏈接到一個zip文件。特別是設置汽車矩陣的部分 – Dervall

+0

:(.. ..抱歉,但我認爲XNA的基本原理我不明白,開發人員能夠發現核心問題的唯一方法是看看整個項目,它仍然很短,很容易看,整個開發還沒有完成 – zeppeldep

回答

1

你永遠不會設置一個方向,這意味着你的東西永遠不會旋轉。從我鋪設的一些代碼中,我繪製了模型網格。

要點:

  • 您需要包括投影和視圖矩陣,並將其設置爲你的效果。你可以在下面的代碼中這樣做。
  • 需要創建Orientation矩陣。有很多便利功能可以幫助您做到這一點Matrix.CreateRotationY
  • 當矩陣相乘時,要小心有序。我相信你已經注意到了這一點,但這個訂單真的很重要。我傾向於搞砸和反覆折騰乘法爲了使事情的工作:)

    public void Draw(Matrix projection, Matrix view) 
    { 
        // Copy any parent transforms. 
        var transforms = new Matrix[model.Bones.Count]; 
        model.CopyAbsoluteBoneTransformsTo(transforms); 
    
        foreach (var mesh in model.Meshes) 
        { 
         // This is where the mesh orientation is set, as well 
         // as our camera and projection. 
         foreach (BasicEffect effect in mesh.Effects) 
         { 
          Matrix world = Orientation; // <- A Matrix that is the orientation 
          world.Translation = Position; // <- A Vector3D representing position 
          effect.World = transforms[mesh.ParentBone.Index] * 
           world; 
    
          effect.View = view; 
          effect.Projection = projection; 
         } 
         // Draw the mesh, using the effects set above. 
         mesh.Draw(); 
        } 
    } 
    
+0

謝謝Dervall ... – zeppeldep

+0

好的。我申請了這個。在加載DXF路徑時記錄方向。在繪圖中使用方向(如答案中所提供)..但所有模型都放置在相機位置。 ??? – zeppeldep

+0

http://dc613.4shared.com/img/XtVyi_Fx/s2/0.5386311451175219/fix1.PNG – zeppeldep