XNA中的大纹理2D

XNA中的大纹理2D,xna,texture2d,Xna,Texture2d,我正在尝试将RTS游戏的贴图存储和显示为texture2d,但贴图太大,并且出现错误“XNA Framework HiDef profile支持最大的texture2d大小4096”。我希望将整个贴图放在一个纹理中的原因是,我可以利用spriteBatch在游戏摄影机中使用的源/目标矩形绘制方法。如果这显然不是一个坏主意,我如何存储和显示大型图像 您无法绕过XNA中的纹理大小限制。使用多种纹理并在不同的位置绘制它们是非常合理的。这只是处理边界的一小部分额外逻辑 不要忘记,4096 x 4096纹

我正在尝试将RTS游戏的贴图存储和显示为texture2d,但贴图太大,并且出现错误“XNA Framework HiDef profile支持最大的texture2d大小4096”。我希望将整个贴图放在一个纹理中的原因是,我可以利用spriteBatch在游戏摄影机中使用的源/目标矩形绘制方法。如果这显然不是一个坏主意,我如何存储和显示大型图像

您无法绕过XNA中的纹理大小限制。使用多种纹理并在不同的位置绘制它们是非常合理的。这只是处理边界的一小部分额外逻辑

不要忘记,4096 x 4096纹理已经是一个高达64MB的未压缩纹理内存(如果DXT压缩,至少是10MB)

如果你关心性能,不要担心。“source rectangle”参数启用纹理贴图集-但这不是您在这里要做的

此外,通常最好通过将平移
矩阵
传递到
SpriteBatch.Begin
,然后在固定坐标处绘制所有内容(包括背景),来实现游戏摄像机。您甚至不需要为背景指定源矩形-视口将简单地对其进行剪裁


如果希望导入大于4096平方米的纹理,可以创建一个内容管道扩展,将这些大纹理切割成更小的纹理。或者,如果您只有少量固定贴图,只需在图像编辑器中将它们分开就更容易了。

您可能可以将图像加载到
System.Drawing.Bitmap
中,并创建一个方法,从中检索所需的矩形。我已经将数据绘制到渲染目标,但我想用一种纹理就不可能重新绘制所有的图像了?我可以写一个方法将纹理分割成更小的纹理,但这样做会破坏试图避免在所有贴图块之间循环的目的。我担心性能,并认为将所有纹理保存到一个纹理是非常聪明的。。。不知道为什么。在谷歌搜索纹理图谱时,我似乎试图以一种非预期的方式使用源矩形参数。我想我得到了DXT的东西,但我不知道如何在XNA中实现它。。。另外,如果我在屏幕外绘制大量纹理,这会影响我的表现吗,或者XNA在这方面是否明智?安维,我将简单地通过我的地图砖循环并实现你的相机!非常感谢。@Max如果可以避免的话,在屏幕外画很多不同的纹理可能是不明智的。不过,如果只是一对夫妇,那就不成问题了。有关性能注意事项的详细说明,请参阅。可以使用内容管道启用压缩:在VS中选择纹理,按F4键获取属性,展开“内容处理器”节点,并将“纹理格式”设置更改为“DxtCompress”。请注意,这是一种有损压缩。