1

我正在重构我在 libgdx 中开发的小型 RPG。

我有一个普遍的问题,如何正确使用纹理图集。我有大约 100 个演员和大约 10 种 Sprites。目前我不使用图集,但我想提高渲染性能,因为如果我的游戏循环,这是唯一需要很长时间的事情。(大约有 100 个绑定和 15 个渲染调用..)

因此,它查看了指向 gitTextureAtlas的Class链接,并想知道如何从中获得更多性能。如果我得到一个具有正确纹理的精灵,我会得到一个副本,所以我仍然会切换 OpenGL 绑定吗?因此,如果我有 100 名演员都拥有自己的精灵,那将不是一个更好的解决方案,或者我错了,我只是没做对?

Atlas 本身不建议getsprite多次调用,但我需要这样做,以便每个演员都有自己的 sprite 和自己的状态。

也许你可以给我一个小例子,我如何在不切换 OpenGL 绑定的情况下使用一个图集中的多个精灵。这应该是使用地图集的原因,但我目前不明白。

4

2 回答 2

5

如果我得到一个具有正确纹理的精灵,我会得到一个副本,所以我仍然会切换 OpenGL 绑定吗?

不,你得到了它的TextureRegion。(Sprite 是一个更专业的 TextureRegion)。

因此,当您绘制所有精灵时,如果它们来自同一个 TextureAtlas,则它们只需要绘制一次。

如何在渲染时在没有新绑定的情况下获得具有图集相同纹理区域的多个精灵?

只需使用TextureAtlas#createSprite

sprite = textureatlas.createSprite("example");

当你绘制它们时,例如这样:

batch.begin();
sprite.draw(batch)
sprite2.draw(batch);
sprite3.draw(batch);
batch.end();

如果 3 个精灵来自同一个 TextureAtlas,它们只会刷新一次批次。

编辑
TextureRegion 只是引用 Texture(Atlas) 的坐标和大小(矩形)。别担心,纹理没有被复制。它只有一个,不管你从中创建了多少精灵 :)

于 2014-01-16T10:16:58.227 回答
0

您更改对象顶点上的纹理坐标以移动它们在纹理图集中指向的位置。通过正确设置对象,您可以在许多对象之间共享一个大纹理,而不是在许多小对象和许多小纹理之间共享。

当事情发生变化时,无需将纹理重新发送到显卡等,您只需移动对象的纹理坐标以指向您希望它们指向的图集的新部分。

于 2014-01-16T09:51:45.403 回答