我試圖存儲並顯示RTS遊戲的貼圖作爲texture2d,但地圖太大,而且出現錯誤「XNA Framework HiDef配置文件支持最大Texture2D尺寸爲4096」。我想在一個紋理中整個地圖的原因是我可以利用spriteBatch在遊戲攝像頭中使用的源/目標rectnagle繪製方法。如果這顯然不是一個好主意,我如何存儲和顯示大圖像?XNA中的大紋理
XNA中的大紋理
回答
你無法繞過XNA中的紋理尺寸限制。使用多個紋理並在不同的地方繪製它們是非常合理的。處理邊界只是少量額外的邏輯。
不要忘記4096乘4096紋理已經是一個高達64MB的紋理內存,未壓縮(如果DXT壓縮,至少需要10MB)。
如果你關心性能 - 不要。 「源矩形」參數啓用紋理圖紋 - 但這不是你在這裏做的。
此外,通常通過將固定座標的所有東西(包括背景)傳遞給Matrix
到SpriteBatch.Begin
,然後Draw
來實現遊戲攝像機。您甚至不需要爲背景指定源矩形 - 視口將簡單地剪切它。
如果您希望導入大於4096平方的紋理,您可以創建一個內容管道擴展以將這些大紋理切割成較小的紋理。或者,如果您只有少量固定地圖,只需在圖像編輯器中將它們分開即可。
我很擔心表演,並認爲通過將它全部保存到一個紋理中我非常聰明......不知道爲什麼。谷歌搜索紋理地圖集時,似乎我試圖以一種無意的方式使用源矩形參數。我認爲我得到了DXT的東西,但我不知道如何在XNA中實現它......另外,如果我要在屏幕外繪製大量的紋理,會妨礙我的表現,還是XNA智能不知何故? Anwyay,我只是簡單地通過我的地圖塊來實現你的相機!非常感謝。 –
@Max如果你可以避開它,可能不太明智的做法是在屏幕外畫很多不同的紋理。不過,如果只是一對夫婦,那不應該是一個問題。請參閱[本答覆](http://gamedev.stackexchange.com/a/9289/288)以瞭解性能注意事項的深入說明。您可以使用內容管道啓用壓縮:在VS中選擇您的紋理,按屬性F4,展開「內容處理器」節點並將「紋理格式」設置更改爲「DxtCompress」。請注意,這是一種有損壓縮。 –
- 1. XNA .Fbx紋理
- 2. XNA Windows Phone 7上的超大紋理
- 3. XNA中的隨機紋理
- 4. XNA紋理加載速度(對於超大的紋理尺寸)
- 5. XNA程序紋理
- 6. XNA crop 2d紋理
- 7. xna紋理座標
- 8. XNA - UV紋理或着色器紋理?
- 9. 將xna中的紋理複製到另一個紋理中
- 10. 渲染到紋理填充XNA中的顏色紋理
- 11. 在xna中生成紋理的Mipmapping
- 12. XNA中一些紋理的問題
- 13. HLSL XNA紋理定位
- 14. 旋轉2D紋理XNA
- 15. XNA紋理拉伸模糊
- 16. 超級模糊紋理 - XNA
- 17. XNA旋轉紋理2D
- 18. XNA紋理圖元透明
- 19. 在Xna中,我如何減少紋理的大小?
- 20. 在HLSL紋理變量(XNA)中存儲屏幕紋理
- 21. 在XNA中需要紋理2D調整大小?
- 22. 加載紋理在XNA中調整
- 23. 在XNA 4.0中拉伸紋理?
- 24. 在XNA中關閉紋理混合
- 25. XNA清除紋理中間渲染?
- 26. 合併紋理上的XNA紋理座標
- 27. XNA正在拖動錯誤的紋理?
- 28. XNA .GetData給出AccessViolationExceptions模型的紋理
- 29. XNA - 渲染到紋理的alpha通道
- 30. XNA - 顯示沒有窗口的紋理?
你可以將你的圖像加載到一個'System.Drawing.Bitmap'中,並創建一個方法從它中檢索所需的矩形。 – user1306322
我會嘗試 –
我已經有數據繪製到渲染目標,但我想這根本不可能用一個紋理重新繪製它?我可以編寫一種方法將紋理劃分爲更小的紋理,但是這種方法會阻止試圖避免遍歷所有地圖切片的目的。 –