首页 文章

libGDX渲染大背景图像的最佳方法是什么?

提问于
浏览
2

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

如果[SpriteBatch]的纹理与最后一个纹理不同,则它会绑定最后一个纹理,提交要绘制的收集几何体,并开始收集新纹理的几何体 . 每隔几个绘制的矩形更改纹理可防止SpriteBatch批处理多个几何体 . 而且,绑定纹理是一种有点昂贵的操作 . 由于这些原因,通常将较大的图像存储在较大的图像中,然后绘制较大图像的区域以最大化几何图形批处理并避免纹理变化 .

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

我的选择似乎要么......

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

  • 为背景使用单独的纹理 .

#1的问题在于,如果我想在不同级别使用不同的背景图像(或者我的图像变得非常大,或者我必须在每个不同背景的多个图像中都有我的游戏精灵的副本),这似乎是非常不切实际的 .

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

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

寻求任何建议,谢谢!

1 回答

  • 4

    如果已经很大的纹理不经常使用,你应该尽量避免将它们包装在相同的纹理(图集)中,就像所有其他小的和经常使用的纹理一样 .

    为什么是这样?因为许多设备会强制您仅使用两个(POT)大小的纹理,并且如果要将大纹理放在一起,这可能会导致相当大的文件浪费大量空间 .

    此外,如果你有10个级别,每个级别具有不同的背景,并且你将所有背景放在一个纹理中,那么你就没有机会只向GPU发送一个背景 . 在每个级别中,您必须将具有所有背景的巨大纹理文件发送到GPU,以便仅显示其中一个 . 因此,它不仅会浪费空间,还会浪费GPU内存,这更糟糕 .

    出于这些原因,并且因为您通常只绘制一次背景,您可以忽略单个纹理切换的开销 . 它不是那么昂贵,如果你每帧只做一次(如果背景),它将没有什么区别 .

    总而言之:从其余部分分离背景纹理并使它们成为单独的文件 .

相关问题