質問
FBXファイルから3Dモデルをインポートする際に問題が発生しました。
ソースモデルには575個のオブジェクトと1台のカメラが含まれており、次のようになります。 http:// habreffect .ru / files / 23d / 542fa7f67 / source_model.png
コンテンツパイプラインモデルで準備されたXNAには、82個のメッシュと576個のボーンが含まれています。 したがって、モデルを描画すると、ソースモデルの一部しか表示されません。次のような結果の画像: http://habreffect.ru/files/28a/6e61c0215/Result_view.png
私の描画コード: ジェネラコディセタグプレ
XNAのモデルインスタンスで575メッシュすべてを取得するにはどうすればよいですか?
ありがとう!
UPD : FBXモデルを3dsmaxにインポートし、すべてのメッシュを選択して、[選択したエクスポート]を使用しようとしました。結果のFBXファイルは11倍大きくなります。次に、それをコンテンツとしてXNAプロジェクトに追加します。ロードされたモデルには、575メッシュすべてが含まれ、正しくレンダリングされます。
残念ながら、この手動変換方法は私には適していません。可変リポジトリからさまざまなfbxモデルをレンダリングする必要があります。
では、XNAコンテンツプロセッサに「適している」FBXファイルはどれですか(私はXNA 4を使用しています)?
解決
つまり、 MSDN でFbxImporterが2006.11バージョンのFBX形式で動作するように設計されていることがわかりました。
最近、オートデスクは FBX Converter 2012.1 をリリースしました。 FBX Eplorer、FBXViewerなどの他のツールが含まれています。
FBXエクスプローラーはFBXファイルの構造を表示でき、3DMAXファイルからエクスポートされたものとソースFBXファイルを比較します。それらは異なる内部フォーマットを持っています。次の変換を試みました:FBX-> Collada-> FBX、および結果のFBXファイルには、MAXデータ構造からエクスポートされたものと同様のものが含まれています。
つまり、結果のFBXをXNAアプリのコンテンツに追加するだけで、うまくレンダリングされます:)
これを機能させるもう1つの方法は、Autodesk FBX SDKを使用してモデルを手動で読み取り、XNAで描画することです。
結論:
- XNA FbxImporterの正しい動作は、FBXファイルのバージョン(2006、2011など)および形式(バイナリ、ASCII)に依存しません。内部FBXデータ構造ははるかに重要です。
- XNA ImporterでFBXを「読み取り可能」にするには、FBX-> Collada-> FBX のような二重変換を使用できます。
- FBX SDKを使用して、FBXからデータを手動で読み込むこともできます
他のヒント
最新の3dxmax 2012で3dモデルを開き、.fbx
形式でエクスポートします。この.fbx
は、xnaモデルローダーで適切にロードされます。エクスポート中にリソースを埋め込むこともできるので、XNAを介してテクスチャを追加する必要はありません。
3DSMAXでインスタンス化を使用しています。これはXNAでは直接サポートされていません。 インスタンスボーンごとにメッシュを自分で描画する必要があります。 理想的には、代わりにDirectXインスタンス化を使用して、1回のDraw()呼び出しでボーンごとに1回各メッシュを描画します。 ただし、ボーンをインスタンスの頂点に変換することにより、独自のコードをロールする必要があります。 デフォルトでは、XNAは最も基本的な操作のみをサポートします。