2014-06-28 29 views
0

我正在嘗試將2D遊戲轉換爲3D,並且遇到了一些紋理問題。整個遊戲是由多維數據集組成的,所以我使用頂點創建一個多維數據集並從draw方法調用它。不過,我只能用基本效果爲所有立方體着色一個紋理。我認爲我需要使用其他類型的效果,所以我可以爲每個立方體選擇紋理,但不確定要做什麼。任何幫助表示讚賞Monogame Multiple Vertices紋理

將使用類似下面的循環在屏幕上繪製立方體。不知怎的,需要紋理爲每立方

foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes) 
{ 
    pass.Apply(); 

    for (int i=0;i<mapsize;i++) 
    { 
     vertices = createCubeTexture(-1.0f, 0.5f); 
     device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 2, VertexPositionTexture.VertexDeclaration); 
    } 
} 
+0

什麼立方體我們需要的代碼來評估這個問題更深。現在,這聽起來像只是繪製了與存儲在列表中一樣多的多維數據集。這顯然會成爲一個問題,如果您不爲每個繪製的立方體加載單獨的紋理。但是顯示一些代碼。 – Falgantil

+0

添加了上面的代碼,希望可以幫助 – user3208483

回答

0

看到有不同是你的問題:

for (int i=0;i<mapsize;i++) 
    { 
     vertices = createCubeTexture(-1.0f, 0.5f); 
     device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 2, VertexPositionTexture.VertexDeclaration); 
    } 

你在整個地圖循環,有紋理創建多維數據集,你遍歷每一次mapsize(推測是一個int)。這很好,但問題在於該方法將爲所有立方體創建相同的紋理。什麼你需要做的是這樣的:

public class Cube 
{ 
    public Vector3 Position { get; set; } 
    public Texture2D Texture { get; set; } 

    public Cube(Vector3 position, Texture2D texture) 
    { 
     Position = position; 
     Texture = texture; 
    } 

    public void Draw(GraphicsDevice device) 
    { 
     var vertices = createCubeTexture(position); 
     device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 2, VertexPositionTexture.VertexDeclaration); 
    } 
} 

請注意,我還沒有在相當長的一段時間,立方體的手工繪圖工作,所以我不記得,如果這是確切的方法,但如果不是,它非常相似。只需循環遍歷每個立方體,然後調用Draw方法即可。

然後當你實例化的立方體,你通過不同的紋理,這取決於你正在創建:)

+0

這很有道理,所以我需要對每個紋理都有不同的效果,並且會對每個立方體分別進行反覆傳遞效果。我認爲會有一種方法只使用一種效果,但使用多種紋理。 – user3208483

+0

實例化多維數據集外部的效果,並將其作爲參考傳遞。這應該工作:) – Falgantil