2014-01-16 59 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