2012-01-18 4 views
0

ストックエンジンモデルで3DS Maxのシーンを作成しました。自分自身、平面、ボタンを追加しました。XNAモデルのインポート - すべてのメッシュが上に表示されます

http://i.stack.imgur.com/R2iva.png

XNAにロードされ、レンダリング時にかかわらず、私はその.Xとしては、パンダの輸出を使用するか、またはその両方2012.2 FBXエクスポータを使用して.FBXかどうか、シーンをエクスポートする方法の、すべてが互いの上に表示されます。

http://i.stack.imgur.com/6gdMb.png

エンジンの個々の部分すべてがどこ彼らが必要まま(および3ds Maxに別々ある)ので、私の残りの部分のレイアウトと3ds Maxで正しく設定していないイムものがあるイムはかなり確信オブジェクト。

更新1:私が作る

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

     foreach (ModelMesh mesh in model.Meshes) 
     { 
      foreach (BasicEffect be in mesh.Effects) 
      { 
       be.EnableDefaultLighting(); 
       be.Projection = camera.projection; 
       be.View = camera.view; 
       be.World = GetWorld() * mesh.ParentBone.Transform; 
       // adding the additional * transforms[i]; didnt do anything 

      } 
      mesh.Draw(); 
     } 

このコードは、他の人々のモデルのための素晴らしい作品ではなく、いずれかを次のように私が使用するコードは、XNAでモデルをロードするためです。 3ds maxのようなものは、シーンの原点に関連してシーン内で作成するオブジェクトの位置をエクスポートしていません。

+0

ちょうどあなたが知っているように、パンダXの輸出業者はXNAで正しく動作しないことがあります。 – annonymously

+0

インターネットからモデルをダウンロードし、それを使用してコードまたはモデルであるかどうかを試しましたか? – annonymously

答えて

1

あなたはこのように、親の骨と子の骨からすべての変換行列を結合する必要があります。

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

foreach (ModelMesh mesh in model.Meshes) { 
    foreach (BasicEffect ef in mesh.Effects) { 
     ef.World = transforms[mesh.ParentBone.Index]; 
     //Also do other stuff here, set projection and view matrices 
    } 
} 

おそらく良い方法はありますが、このコードは動作するはずです。

+0

追加の '* transforms [i]'が必要ないとは思わない –

+0

@Neilそれを確認できたら、それを削除します – annonymously

+0

私の答えはモデルの読み込み方法を示すのに使用するコードで更新しました – jordanrs

関連する問題