XNA - 相同源模型的副本

时间:2013-08-19 22:46:10

标签: c# reference xna instance 3d-model

如果我这样做:

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”看起来总是一样。

我能想到的唯一解决方法是为每个模型创建一个不同的floortile fbx模型,但是我有很多瓷砖,所以这远非理想。

1 个答案:

答案 0 :(得分: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,我不知道是否有用。