【问题标题】:libGDX What's the best way to render a large background image?libGDX 渲染大背景图像的最佳方式是什么?
【发布时间】:2014-03-21 10:28:32
【问题描述】:

libGDX 文档解释了如何将纹理绑定到 SpriteBatch...

如果 [SpriteBatch] 被赋予与上一个纹理不同的纹理,则它绑定最后一个纹理,提交收集的要绘制的几何图形,并开始为新纹理收集几何图形。

每隔几个绘制的矩形更改一次纹理可以防止 SpriteBatch 批量处理大量几何体。此外,绑定纹理是一项有点昂贵的操作。由于这些原因,通常将许多较小的图像存储在较大的图像中,然后绘制较大图像的区域以最大化几何批处理并避免纹理更改。

出于这个原因,我已将我所有的游戏精灵图像排列成一个纹理。但是,我现在希望在我的游戏中放置一个大的背景图片来填满整个屏幕。

我的选择似乎是……

  1. 将背景放在我用于较小游戏精灵的相同纹理中,或者...

  2. 为背景使用单独的纹理。

#1 的问题是,如果我想为不同的关卡使用不同的背景图像,这似乎非常不切实际(我的图像变得非常非常大,或者我必须为每个图像在多个图像中复制我的游戏精灵不同的背景)

但是如果我执行 #2,那么我必须在每次提交到 GPU 之前将 SpriteBatch 绑定到 2 个不同的纹理,文档将其描述为“相当昂贵”。

我不知道最好的方法是什么。我真的需要担心绑定到多个纹理吗?或者有没有更好的方法我没有考虑过?

寻求任何建议,谢谢!

【问题讨论】:

  • 我认为绑定 2 个纹理不会那么昂贵。我认为如果您使用更多绑定,就会出现问题。也许这里的这个可以以某种方式帮助你:stackoverflow.com/questions/21164348/…

标签: background textures libgdx spritebatch


【解决方案1】:

如果已经很大的纹理不会经常使用,您应该尽量避免将它们打包在同一个纹理(图集)中,就像所有其他小且经常使用的纹理一样。

这是为什么?因为许多设备会强制您仅使用两个 (POT) 大小的纹理的幂,并且在您想要将大纹理放在一起的情况下,这可能会导致一个非常大的文件并浪费大量空间。

此外,如果您有 10 个关卡,每个关卡都有不同的背景,并且您会将所有背景放在一个纹理中,那么您就不可能只将一个背景发送到您的 GPU。在每个关卡中,您都必须将具有所有背景的巨大纹理文件发送到 GPU,以便仅显示其中一个。这样不仅会浪费空间,还会浪费 GPU 内存,更糟。

由于这些原因,并且由于您通常只绘制一次背景,您可以忽略单个纹理切换的开销。它并不那么昂贵,如果你每帧只做一次(在背景的情况下)它不会有什么不同。

所以总的来说:将背景纹理与其他纹理分开,并将它们制作成单独的文件。

【讨论】:

  • 谢谢大家。正是我想要的解释。
  • @Noone:您好,我正在显示大小为 6MB 的图像。但它在 Display[TV Monitor display] 上显示黑屏。没有抛出错误。我如何在运行时知道是实际显示大图像还是显示黑屏。我是 GDX 的新手,正在做一个项目。代码已经写好了。
猜你喜欢
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
  • 2020-02-06
  • 1970-01-01
  • 2010-09-18
相关资源
最近更新 更多