XNA效果和模型

时间:2012-01-17 10:34:57

标签: c# xna

交叉发布: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有什么不同?当我检查两个实例的属性时,它们似乎都是一样的。

enter image description here

  1. “默认”BasicEffect
  2. 的外观
  3. 实例化新的BasicEffect
  4. 时的外观

1 个答案:

答案 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都有自己的材料,所以确保您不会丢失任何想要保留的数据。