Рисование различных текстур с помощью одного базового эффекта, XNA 4.0 - PullRequest
1 голос
/ 04 июня 2011

У меня проблема в игре, которую я написал с XNA. Недавно я добавил текстурированные полигоны и увидел, что каждый текстурированный полигон имеет одну и ту же текстуру, хотя я изменил ее перед вызовом. Код, который я использую:

      if (countMeshes > 0)
        {

            for (int i = 0; i < countMeshes; i++)
            {

                TexturedMesh curMesh = listMeshes[i];

                if (curMesh.tex == null)
                {

                    drawEffect.Texture = WHITE_TEXTURE;

                }
                else
                {
                    drawEffect.Texture = curMesh.tex;
                }

                drawEffect.Techniques[0].Passes[0].Apply();
                graphics.DrawUserPrimitives(PrimitiveType.TriangleList, curMesh.verts, 0, curMesh.count);

            }
        }

Теперь первое, что мне пришло в голову, - это создать базовый эффект для каждой текстуры, которую мне нужно нарисовать. Но я думаю, что это было бы немного излишним, поэтому мой вопрос: как мне это сделать?

PS: Я дважды проверил все, UV-координаты в порядке, и это 2D.

1 Ответ

1 голос
/ 05 июня 2011

Похоже, что единственный способ, как я это сделал, - создать словарь с текстурой в качестве ключа и структурой базового эффекта и списком вершин в качестве значения.

Примерно так:

public struct MeshEffect
{

    public TexturedMesh mesh;
    public BasicEffect effect;

}

и словарь:

 private Dictionary<Texture2D, MeshEffect> texturedMeshes = new Dictionary<Texture2D, MeshEffect>();

Но все это действительно зависит от того, как вы обрабатываете рисование, но одно можно сказать точно: вы не можете использовать более одной текстуры для одного BasicEffect.

...