2011-05-05 106 views
2

我從FBX文件導入3D模型時遇到問題。XNA 4:導入FBX問題

源模型包含575級的對象+ 1個攝像頭,看起來像這樣:http://habreffect.ru/files/23d/542fa7f67/source_model.png

與內容管道模型編寫XNA包含82項目,和576分的骨頭。因此,當我繪製我的模型時,我只看到部分源模型。效果圖類似以下內容: http://habreffect.ru/files/28a/6e61c0215/Result_view.png

我的繪製代碼:

GraphicsDevice.Clear(Color.CornflowerBlue); 

Matrix[] transforms = new Matrix[_model.Bones.Count]; 
_model.CopyAbsoluteBoneTransformsTo(transforms); 

foreach (var mesh in _model.Meshes) 
{ 
    foreach (BasicEffect effect in mesh.Effects) 
    { 
     effect.LightingEnabled = true; 
     effect.EnableDefaultLighting(); 
     effect.World = transforms[mesh.ParentBone.Index] * _world; 
     effect.View = _view; 
     effect.Projection = _proj; 
    } 
    mesh.Draw(); 
} 
base.Draw(gameTime); 

我怎樣才能得到所有575個網在XNA我的模型實例?

謝謝!

UPD我試圖導入我的FBX模型到3ds max,選擇所有網格並使用「導出選定」。結果FBX文件大11倍。然後我將它作爲XNA項目的內容添加,加載的模型包含所有575個網格,並且它正確渲染。

不幸的是,這種手動轉換方法不適合我 - 我需要從可變的存儲庫中呈現不同的fbx模型。

那麼,什麼FBX文件對XNA內容處理器(我使用XNA 4)是「好」?

回答

2

因此,在MSDN我發現FbxImporter設計爲與2006.11版本的FBX格式一起工作。

最近Autodesk發佈了FBX Converter 2012.1,其中包含其他工具,如FBX Eplorer,FBX Viewer。

FBX瀏覽器可以顯示FBX文件的結構,並且可以比較從3D MAX文件和源FBX文件導出的結果。他們有不同的內部格式。我嘗試進行以下轉換:FBX - > Collada - > FBX,結果FBX文件包含類似於從MAX數據結構導出的文件。

所以,我只不過是結果FBX添加到我的XNA應用程序的內容,它的渲染以及:)

另一種方法,使其工作是使用的Autodesk FBX SDK手動讀取模式,並把它收回去XNA。

結論

  1. XNA FbxImporter正確的工作並不依賴於FBX文件的版本(2006年,2011年,等)和形式(二進制,ASCII)。內部FBX數據結構更重要。
  2. 爲了使FBX 「可讀」 爲XNA進口商您可以使用雙變換像FBX - >的Collada - > FBX
  3. 您還可以使用FBX SDK的FBX手動加載數據
+0

感謝您的FBX轉換器的鏈接。由於Blender以ASCII FBX格式導出,而不是二進制文件,因此我可以使用此應用程序將ASCII轉換爲二進制文件,從而導致極小的文件大小。一架簡單的飛機從122.81 KB變爲33.50 KB。 +1 – DMan 2011-06-18 04:16:22

0

開啓3D模型在最新的3dx max 2012中,並以.fbx格式導出。這個.fbx用xna模型加載器正確加載。在導出時,您甚至可以嵌入資源,因此您不必通過XNA爲其添加紋理。

0

您正在3DS MAX中使用實例。這不是XNA直接支持的。 您必須自己爲每個實例骨骼繪製網格。 理想情況下,您將使用DirectX實例在單個Draw()調用中爲每個骨骼繪製一次網格。 但是,您必須通過將自己的代碼轉換爲實例頂點來完成此操作。 默認情況下XNA僅支持最基本的操作。