2013-01-07 67 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”。请注意,这是一种有损压缩。 –