XNA-相同源模型的副本

本文关键字:副本 模型 XNA- | 更新日期: 2023-09-27 18:28:19

如果我这样做:

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效果,虽然我知道如何克隆单个效果来处理多个唯一的fbxs,但我不知道如何创建一个三维模型的多个实例,并为每个实例分配自己的纹理,而不是所有这些都引用一个纹理/效果,因此我的场景中的每个"floorTile"看起来总是一样的。

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

XNA-相同源模型的副本

我能想到的唯一解决方案是这样的:

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是否有用。