Эффекты и модели XNA - PullRequest
       5

Эффекты и модели XNA

1 голос
/ 17 января 2012

Кросс-пост: https://gamedev.stackexchange.com/questions/22526/xna-effects-and-models-question/22530#22530

Я бы хотел понять, почему я получаю совершенно другой результат, когда я заменяю эффекты модели (как предложено Как: Нарисовать модель с пользовательским эффектом ) на BasicEffect, которое я создай себе экземпляр:

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. Как это выглядит, когда я создаю новый BasicEffect

1 Ответ

1 голос
/ 18 января 2012

Вам не нужно снова создавать весь эффект, просто измените свойства, необходимые для исходного 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 может иметь собственный материал, что гарантирует, что вы не потеряете данные, которые хотите сохранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...