【问题标题】:Large texture2d in XNAXNA中的大texture2d
【发布时间】:2012-12-21 18:37:44
【问题描述】:

我正在尝试将 RTS 游戏的地图存储并显示为 texture2d,但地图太大,并且我收到错误消息“XNA Framework HiDef 配置文件支持最大 Texture2D 大小为 4096”。我希望将整个地图放在一个纹理中的原因是,我可以利用 spriteBatch 在游戏相机中使用的源/目标矩形绘制方法。如果这显然不是一个坏主意,我该如何存储和显示大图像?

【问题讨论】:

  • 您可以将您的图像加载到System.Drawing.Bitmap 并创建一个从中检索所需矩形的方法。
  • 我已经将数据绘制到渲染目标,但我想不可能用一个纹理重新绘制所有数据?我可以编写一种方法来将纹理划分为更小的纹理,但这违背了试图避免循环遍历所有地图图块的目的。

标签: xna texture2d


【解决方案1】:

您无法绕过 XNA 中的纹理大小限制。使用多个纹理并在不同的地方绘制它们是非常合理的。处理边框只是少量的额外逻辑。

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

如果您担心性能,请不要担心。 “源矩形”参数启用纹理图集 - 不过,这不是您在这里所做的。

此外,通常最好通过将平移Matrix 传递给SpriteBatch.Begin,然后Draw 将所有内容(包括背景)传递给固定坐标来实现游戏相机。您甚至不需要为背景指定源矩形 - 视口会简单地剪切它。

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

【讨论】:

  • 我担心性能问题,并认为将其全部保存到一个纹理中非常聪明……不知道为什么。在谷歌上搜索纹理图集时,似乎我试图以一种非预期的方式使用源矩形参数。我想我得到了 DXT 的东西,但我不知道如何在 XNA 中实现它......另外,如果我要在屏幕外绘制大量纹理,这会影响我的性能,还是 XNA 聪明不知何故? Anwyay,我将简单地遍历我的地图图块并实现你的相机!非常感谢。
  • @Max 如果可以避免的话,在屏幕外绘制大量不同的纹理可能是不明智的。但是,如果只是一对夫妇,那应该不是问题。有关性能注意事项的深入描述,请参阅 this answer。您可以使用内容管道启用压缩:在 VS 中选择您的纹理,按 F4 获取属性,展开“内容处理器”节点并将“纹理格式”设置更改为“DxtCompress”。请注意,这是一种有损压缩。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多