2013-01-07 94 views
0

我試圖存儲並顯示RTS遊戲的貼圖作爲texture2d,但地圖太大,而且出現錯誤「XNA Framework HiDef配置文件支持最大Texture2D尺寸爲4096」。我想在一個紋理中整個地圖的原因是我可以利用spriteBatch在遊戲攝像頭中使用的源/目標rectnagle繪製方法。如果這顯然不是一個好主意,我如何存儲和顯示大圖像?XNA中的大紋理

+1

你可以將你的圖像加載到一個'System.Drawing.Bitmap'中,並創建一個方法從它中檢索所需的矩形。 – user1306322

+0

我會嘗試 –

+0

我已經有數據繪製到渲染目標,但我想這根本不可能用一個紋理重新繪製它?我可以編寫一種方法將紋理劃分爲更小的紋理,但是這種方法會阻止試圖避免遍歷所有地圖切片的目的。 –

回答

2

你無法繞過XNA中的紋理尺寸限制。使用多個紋理並在不同的地方繪製它們是非常合理的。處理邊界只是少量額外的邏輯。

不要忘記4096乘4096紋理已經是一個高達64MB的紋理內存,未壓縮(如果DXT壓縮,至少需要10MB)。

如果你關心性能 - 不要。 「源矩形」參數啓用紋理圖紋 - 但這不是你在這裏做的。

此外,通常通過將固定座標的所有東西(包括背景)傳遞給MatrixSpriteBatch.Begin,然後Draw來實現遊戲攝像機。您甚至不需要爲背景指定源矩形 - 視口將簡單地剪切它。

如果您希望導入大於4096平方的紋理,您可以創建一個內容管道擴展以將這些大紋理切割成較小的紋理。或者,如果您只有少量固定地圖,只需在圖像編輯器中將它們分開即可。

+0

我很擔心表演,並認爲通過將它全部保存到一個紋理中我非常聰明......不知道爲什麼。谷歌搜索紋理地圖集時,似乎我試圖以一種無意的方式使用源矩形參數。我認爲我得到了DXT的東西,但我不知道如何在XNA中實現它......另外,如果我要在屏幕外繪製大量的紋理,會妨礙我的表現,還是XNA智能不知何故? Anwyay,我只是簡單地通過我的地圖塊來實現你的相機!非常感謝。 –

+0

@Max如果你可以避開它,可能不太明智的做法是在屏幕外畫很多不同的紋理。不過,如果只是一對夫婦,那不應該是一個問題。請參閱[本答覆](http://gamedev.stackexchange.com/a/9289/288)以瞭解性能注意事項的深入說明。您可以使用內容管道啓用壓縮:在VS中選擇您的紋理,按屬性F4,展開「內容處理器」節點並將「紋理格式」設置更改爲「DxtCompress」。請注意,這是一種有損壓縮。 –