1

libgdx で開発した小さな RPG をリファクタリングしています。

テクスチャ アトラスを正しく使用する方法に関する一般的な質問がありました。約 10 種類のスプライトを持つ 100 人のアクターを獲得しました。現在、私はアトラスを使用していませんが、ゲームループの場合に内部で時間がかかるのはこれだけなので、レンダリングパフォーマンスを向上させたいと思います.(約100バインドと15レンダーコールを取得..)

TextureAtlasそのため、Git へのClassリンクを調べて、それからどのようにパフォーマンスを向上させるのか疑問に思っていました。適切なテクスチャでスプライトを取得すると、コピーが取得されるので、OpenGL バインディングを正しく切り替えますか? 100 人のアクターがすべて独自のスプライトを持っている場合、それは特別なより良い解決策ではないでしょうか。

アトラス自体はgetsprite複数回呼び出すことを推奨していませんが、すべてのアクターが独自のステータスを持つ独自のスプライトを持つように、そうする必要があります。

OpenGL のバインディングを切り替えることなく、1 つのアトラスから複数のスプライトを使用する方法を少し例を挙げていただけないでしょうか。それがアトラスを使用する理由になるはずですが、現時点ではわかりません。

4

2 に答える 2

5

適切なテクスチャでスプライトを取得すると、コピーが取得されるので、OpenGL バインディングを正しく切り替えますか?

いいえ、TextureRegionを取得します。(Sprite はより特殊化された TextureRegion です)。

したがって、すべてのスプライトを描画するとき、それらが同じ TextureAtlas からのものである場合、描画は 1 回だけで済みます。

レンダリング時に新しいバインディングなしでアトラスの同じテクスチャ領域を持つ複数のスプライトを取得するにはどうすればよいですか?

TextureAtlas#createSpriteを使用するだけです:

sprite = textureatlas.createSprite("example");

たとえば、次のように描画すると、次のようになります。

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

3 つのスプライトが同じ TextureAtlas からのものである場合、それらはバッチを 1 回だけフラッシュします。

編集
TextureRegion は、Texture(Atlas) を参照する座標とサイズ (長方形) のみです。テクスチャはコピーされません。その唯一のものは、そこからいくつのスプライトを作成してもかまいません:)

于 2014-01-16T10:16:58.227 に答える
0

オブジェクトの頂点のテクスチャ座標を変更して、テクスチャ アトラスで指している場所に移動します。オブジェクトを正しく設定することで、多数の小さなオブジェクトと多数の小さなテクスチャではなく、多数のオブジェクト間で 1 つの大きなテクスチャを共有できます。

状況が変わったときにテクスチャをグラフィックス カードなどに再送信する必要はありません。オブジェクトのテクスチャ座標を移動して、オブジェクトが指すアトラスの新しいセクションを指すようにするだけです。

于 2014-01-16T09:51:45.403 に答える