TextureRegionを作成します
まず、TextureAtlas
アトラスを説明するテキストファイルをポイントしてオブジェクトを作成します(アトラスを作成するツールは、画像とその内容を説明するテキストファイルの2つのファイルを作成します)。
TextureAtlas myTextures = new TextureAtlas("images/packed.txt");
TextureRegion
次に、そのアトラス(つまり、アトラスの特定のサブテクスチャ)でを検索できます。リージョンには、使用された元のファイルのベース名が含まれている必要があります(特別な命名規則に従ってテクスチャ要素の配列を作成する場合は、詳細とオプションがありますが、ここでは省略します)。
TextureRegion region = myTextures.findRegion(fname);
テクスチャメッシュを構成する
このテクスチャ領域をメッシュに描画するにはMesh
、テクスチャ座標をサポートしてを初期化する必要があります。
Mesh myMesh = new Mesh(...,
new VertexAttribute(Usage.TextureCoordinates, 2, "y"));
はnew VertexAttribute(Usage.TextureCoordinates, 2, ...)
libGDXに、このメッシュが頂点ごとに2つのテクスチャ座標を持つことを通知します(従来、2つのテクスチャ座標はandと呼ばれu
ますv
)。頂点ごとにさまざまな属性を設定できますが、他の属性はUsage.Position
x、y、z空間座標の3値のみであると想定します。
ここで、メッシュを定義するfloatの配列(渡す配列setVertices
)で、各頂点のx、y、z空間座標に加えてu、vテクスチャ座標を設定する必要があります。
final int floatsPerVertex = 5; // 3 spatial + 2 texture
float[] meshData = new float[numVerticies * floatsPerVertex];
for (int i = 0; i < numVerticies; i++) {
meshData[(i * floatsPerVertex) + 0] = ... ; // x coordinate of i'th vertex
meshData[(i * floatsPerVertex) + 1] = ... ; // y coordinate of i'th vertex
meshData[(i * floatsPerVertex) + 2] = ... ; // z coordinate of i'th vertex
meshData[(i * floatsPerVertex) + 3] = ... ; // u texture coordinate of i'th vertex
meshData[(i * floatsPerVertex) + 4] = ... ; // v texture coordinate of i'th vertex
}
myMesh.setVertices(meshData);
、、、、およびメソッドを使用して、特定の権利u
を計算できます。テクスチャ座標は左上に原点(u1、v1)があり、y軸は「下」になっていることに注意してください(OpenGLの画面座標と空間座標は通常、左下に原点があり、y軸は「上")。少し複雑ですが、メッシュにマッピングするときにテクスチャを反転、ストレッチ、または歪ませることができるという点で非常に柔軟性があります。v
TextureRegion
getU
getV
getU2
getV2
テクスチャは大きく(たとえば512x512)、特定の領域はその小さなサブセット(たとえば、128x128で20x20)であるため、実際には、512x512画像全体の20x20サブセットのみを利用するメッシュテクスチャ座標を与えることになります。
テクスチャメッシュをレンダリングする
最後に、レンダリングするときは、画像をバインドし、レンダリングする前にテクスチャリングを有効にする必要があります。
region.getTexture().bind();
Gdx.graphics.getGL10().glEnable(GL10.GL_TEXTURE_2D);
myMesh.render();
Gdx.graphics.getGL10().glDisable(GL10.GL_TEXTURE_2D);
これは本来よりもはるかに効率が悪いことに注意してください。テクスチャアトラスの利点の一部は、一緒にレンダリングできる多くの領域が含まれている必要があるため、1つのテクスチャをバインドするだけで、その1つのバインドされたテクスチャから多くの異なるテクスチャメッシュをレンダリングする必要があります。
SpriteBatch
aで定義されたスプライトをTextureRegion
サポートし、ファーストクラス要素としてのAssetManager
ロードと検索をサポートします。TextureAtlas