使用单个基本效果(XNA 4.0)绘制不同的纹理

时间:2011-06-04 10:50:30

标签: c# textures xna-4.0

我在使用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);

            }
        }

现在,我想到的第一个是为我需要绘制的每个纹理创建一个BasicEffect。但我觉得这有点过分,所以我的问题是:我该怎么做?

PS:我仔细检查了一切,UV Coords很好,它是2D。

1 个答案:

答案 0 :(得分:1)

这似乎是唯一的方法,我这样做的方式是创建一个以纹理作为关键字和基本效果结构以及顶点列表作为值的字典。

这样的事情:

public struct MeshEffect
{

    public TexturedMesh mesh;
    public BasicEffect effect;

}

和词典:

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

但这一切都取决于你如何处理绘图,但有一件事是肯定的,你不能在一个BasicEffect上使用多个纹理。