2014-01-16 24 views
1

我重构我的小RPG游戏我libgdx发展。优势的TextureAtlas以及如何使用它的权利

我有一个一般性的问题如何使用纹理图集权。我得到了大约10种精灵的100名演员。目前我不使用地图集,但我想增加渲染性能,因为如果我的游戏循环这是唯一需要很长时间的内容(有100binds和15个rendercalls ..)

所以它看看TextureAtlaslink to git,并想知道我如何从中获得更多的性能。如果我用正确的纹理得到它的精灵,我会得到一个副本,所以我仍然会切换OpenGL绑定吗?所以这不会是一个更好的解决方案,特别是如果我有100个演员都有自己的精灵,或者我错了,我只是没有得到那个权利?

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

也许你可以给我一个小例子我如何使用多个精灵从一个图谱,而无需切换的OpenGL的结合。这应该是使用地图集的原因,但目前我不明白。

回答

5

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

不,你得到它的TextureRegion。 (雪碧是一个更专业的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不会被复制。它只有一个,无论你从它创建多少个精灵:)

+0

因此,精灵纹理区域的纹理应该是对图集的参考?我不会在创建精灵方法中使用seethat。 – BennX

+0

是的,地图集是纹理。是的,TextureRegion只是引用它的坐标和大小(一个矩形)。别担心,Texture不会被复制。它只有一个,无论你从它创建多少个精灵:) – Lestat

+0

非常感谢。即使在查看了代码后,我仍然对此感到困惑。感谢您的解决方案。也许把它加到你的答案中。 – BennX

0

你改变你的对象的顶点纹理坐标移动,他们在纹理地图指指点点。通过正确设置对象,您可以在很多对象之间共享一个大纹理,而不是许多小对象和大量小纹理。

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

+0

是的,但我该如何实现该目标获取多个精灵具有相同的地图集纹理区域时没有新的绑定时渲染。获取精灵似乎复制纹理或我完全错了。对不起,我很困惑 – BennX

+0

对不起,我熟悉纹理地图集,但不是与你正在使用的库,所以我不能更具体。 –

+1

@Bennx根据位于纹理上的多个精灵来简单计算所有的UV坐标。 – Vallentin