2

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

私の描画コード:

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);

XNAのModelインスタンスで575メッシュすべてを取得するにはどうすればよいですか?

ありがとう!

UPDFBXモデルを3ds maxにインポートし、すべてのメッシュを選択して、[選択したエクスポート]を使用しようとしました。結果のFBXファイルは11倍大きくなります。次に、それをコンテンツとしてXNAプロジェクトに追加します。ロードされたモデルには、575個のメッシュがすべて含まれており、正しくレンダリングされます。

残念ながら、この手動変換方法は私には適していません。可変リポジトリからさまざまなfbxモデルをレンダリングする必要があります。

では、どのFBXファイルがXNAコンテンツプロセッサに「適している」のでしょうか(私はXNA 4を使用しています)。

4

3 に答える 3

2

そのため、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で描画することです。

結論

  1. XNA FbxImporterの正しい動作は、バージョン(2006、2011など)およびFBXファイルの形式(バイナリ、ASCII)に依存しません。内部FBXデータ構造ははるかに重要です。
  2. XNA ImporterでFBXを「読み取り可能」にするには、FBX->Collada->FBXのような二重変換を使用できます。
  3. FBX SDKを使用して、FBXからデータを手動でロードすることもできます
于 2011-05-11T03:49:11.757 に答える
0

最新の3dxmax2012で3dモデルを開き、.fbxフォーマットでエクスポートします。これ.fbxは、xnaモデルローダーで適切にロードされます。エクスポート中にリソースを埋め込むこともできるので、XNAを介してテクスチャを追加する必要はありません。

于 2012-08-08T10:13:32.513 に答える
0

3DSMAXでインスタンス化を使用しています。これは、XNAでは直接サポートされていません。インスタンスボーンごとにメッシュを自分で描画する必要があります。理想的には、代わりにDirectXインスタンス化を使用して、1回のDraw()呼び出しでボーンごとに1回各メッシュを描画します。ただし、ボーンをインスタンスの頂点に変換することにより、独自のコードをロールする必要があります。デフォルトでは、XNAは最も基本的な操作のみをサポートします。

于 2012-11-10T08:04:44.543 に答える