1

私がこれを行う場合:

Model test1 = content.Load<Model>(@"Models/floorTile");
Model test2 = content.Load<Model>(@"Models/floorTile");
Model test3 = content.Load<Model>(@"Models/floorTile");

foreach (ModelMesh mesh in test1.Meshes)
    foreach (Effect effect in mesh.Effects)
        ((BasicEffect)effect).DiffuseColor = Color.Red.ToVector3();

test1 だけでなく、3 つのモデルすべてに赤色が割り当てられます。

これは私の問題の単純化されたバージョンです。実際のバージョンでは、実際の HLSL エフェクトを使用しています。単一のエフェクトを複製して複数の一意の fbx で動作させる方法は知っていますが、複数のインスタンスを作成する方法はわかりません。すべてが 1 つのテクスチャ/効果を参照するのではなく、それぞれに独自のテクスチャを割り当てます。したがって、シーン内のすべての「床タイル」は常に同じように見えます。

考えられる唯一の回避策は、モデルごとに異なるフロアタイル fbx モデルを作成することですが、多くのタイルがあるため、理想とはほど遠いものです。

4

1 に答える 1

0

私が考えることができる唯一の解決策は、次のようなものです。

foreach (var mesh in Model.Meshes)
{
   foreach (BasicEffect effect in mesh.Effects)
   {
       effect.EnableDefaultLighting();
       effect.TextureEnabled = true;
       effect.Texture = modelTexture;
       effect.Projection = Camera.Projection;
       effect.View = Camera.View;
       effect.World = AbsoluteBoneTransforms[mesh.ParentBone.Index] * FinalWorldTransforms;
    }
    mesh.Draw();
}

複数Model(Model1、Model2、Model3 など)modelTextureを使用して、それらに適用することができます。
これが を使用してBasicEffectいることがわかりますが、HLSL を使用している場合に役立つかどうかはわかりません。

于 2013-08-20T00:24:43.600 に答える