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。

这是我的问题的简化版本,在实际版本中,我使用的是实际的 HLSL 效果,虽然我知道如何克隆单个效果以处理多个唯一的 fbx,但我不确定如何创建多个实例一个 3dmodel 并分配每个它自己的纹理,而不是它们都引用一个纹理/效果,因此我场景中的每个“floorTile”看起来总是一样的。

我能想到的唯一解决方法是为每个模型创建一个不同的地板砖 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 回答