交叉发布:https://gamedev.stackexchange.com/questions/22526/xna-effects-and-models-question/22530#22530
我想理解为什么当我用我自己实例化的BasicEffect替换模型的效果(由How To: Draw a Model with a Custom Effect建议)时,我得到完全不同的结果:
var basicEffect = new BasicEffect( game.GraphicsDevice );
basicEffect.EnableDefaultLighting();
foreach (var mesh in _modelHead.Meshes)
foreach (var part in mesh.MeshParts)
part.Effect = basicEffect;
我的目标当然是稍后使用我自己的效果,但目前我真的很想了解发生了什么!?与我自己实例化的预定义BasicEffect有什么不同?当我检查两个实例的属性时,它们似乎都是一样的。
答案 0 :(得分:1)
您不必再次创建整个效果,只需在Effect
的原始ModelMeshPart
属性上修改所需的属性。
所以而不是:
var basicEffect = new BasicEffect( game.GraphicsDevice );
basicEffect.EnableDefaultLighting();
foreach (var mesh in _modelHead.Meshes)
foreach (var part in mesh.MeshParts)
part.Effect = basicEffect;
这样做:
foreach (var mesh in _modelHead.Meshes)
foreach (var part in mesh.MeshParts)
((BasicEffect)part.Effect).EnableDefaultLighting();
这将保留使用第一种方法丢失的镜面反射和漫反射颜色,并节省代码空间。
另外,因为每个ModelMeshPart
都有自己的材料,所以确保您不会丢失任何想要保留的数据。