【问题标题】:Drawing different Textures with a single Basic Effect, XNA 4.0使用单个基本效果绘制不同的纹理,XNA 4.0
【发布时间】:2011-06-04 10:50:30
【问题描述】:

我在使用 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 坐标很好,而且是 2D。

【问题讨论】:

    标签: c# textures xna-4.0


    【解决方案1】:

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

    类似这样的:

    public struct MeshEffect
    {
    
        public TexturedMesh mesh;
        public BasicEffect effect;
    
    }
    

    和字典:

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

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

    【讨论】:

      猜你喜欢
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      相关资源
      最近更新 更多