如果我这样做:
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模型,但是我有很多瓷砖,所以这远非理想。
答案 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,我不知道是否有用。