0


0

XNAがモデルテクスチャを自動的にロードしない

私はここに非常にn00bのような質問があります.. この小さなXNAゲームでは、Microsoftがすでに作成および提供している3Dモデルをインポートしようとしました。 問題は、モデルに関連付けられたものがプロジェクトディレクトリに存在することを確認しても、XNAがこのモデルに関連付けられたテクスチャをロードしないことです(これらのテクスチャが見つからない場合、コンパイラーはエラーを返します).. だから基本的には大きな粘土モデルが見える :P ..

この写真は、私が得ている結果を示しています。

これは次のようになります。

ここに欠けているものはありますか? XNAは、特定のモデルに関連付けられたすべてのテクスチャを自動的に適用するべきではありませんか?

2 Answer


1


`dude.fbx`モデルをレンダリングするとき、モデルを描画するループで次のようなものがあることを確認してください:

foreach (ModelMesh mesh in model.Meshes)
{
    foreach (BasicEffect effect in mesh.Effects)
    {
        effect.EnableDefaultLighting();
    }
}

これは私の頭上にあるので、メソッド呼び出しは正しくないかもしれません。


0


Xnaは、モデルのテクスチャを自動的にロードしません。 テクスチャが存在しない場合に発生する例外は、Xnaのリソースコンパイラによってスローされ、実際に何かをインポートすることとは関係ありません。

これを解決する方法は、 `LoadContent()`または `ContentManager`がある他の場所でテクスチャを手動でロードすることです:

modelTexture = Content.Load("mytexture");

そして、カスタム効果がある場合はパラメーターとしてテクスチャを追加するか、描画するときに BasicEffect`インスタンスの Texture`プロパティにテクスチャを追加します。

foreach (ModelMesh mesh in model.Meshes)
{
    foreach (BasicEffect eff in mesh.Effects)
    {
        eff.TextureEnabled = true;
        eff.Texture = modelTexture;
    }
    mesh.Draw();
}

(ただし、描画は明らかに `LoadContent()`で行われるべきではありません)

BasicEffect`を使用するときにテクスチャをアクティブ化するために必要な eff.TextureEnabled = true; `に注意してください。