2011-06-04 47 views
1

我在使用XNA編寫的遊戲中遇到問題。我最近添加了紋理多邊形,並且看到每個紋理多邊形都共享相同的紋理,儘管在調用之前我更改了它。我使用的代碼:現在使用單一基本效果繪製不同的紋理,XNA 4.0

 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

這似乎是唯一的方法,我做的方式是創建一個帶紋理的字典作爲鍵和基本效果的結構,並將頂點列表作爲值。

事情是這樣的:

public struct MeshEffect 
{ 

    public TexturedMesh mesh; 
    public BasicEffect effect; 

} 

和詞典:

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

但是這一切真的取決於你如何處理通過繪畫,但有一點是肯定的,則不能使用超過一個BasicEffect上的一個紋理。