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模型,但我有很多瓷砖,所以这远非理想。
我能想到的唯一解决方案是这样的:
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是否有用。