こんにちは、ディスプレイに描画する 35 枚の画像があります。私は7X5グリッドでそれを描いています。画像はインターネットからダウンロードしたものです。画像がダウンロードされるたびに、35 枚の画像全体を描画しようとします。しかし、それらのいくつかはまだダウンロードされていません。そのため、代わりにデフォルトのタイルをいくつか描画します。問題は、画像がダウンロードされるたびに、以前に描画した画像も再度描画していることです。減らしたい。そこで、Texture Atlas のようなものを作ろうと考えていました。私は手動でそれをやろうとしています。で大きな画像を作成し、 でglTexImage2D
サブ画像を追加することでそれを行っていglTexSubImage2D
ます。
glGenTextures(1, tex);
glBindTexture(GL_TEXTURE_2D, (*tex));
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage2D(GL_TEXTURE_2D, 0, textureImageInfo->format, textureImageInfo->texWidth, textureImageInfo->texHeight, 0, textureImageInfo->format, GL_UNSIGNED_BYTE, NULL);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, textureImageInfo->imageWidth, textureImageInfo->imageHeight, textureImageInfo->format, GL_UNSIGNED_BYTE, textureImageInfo->image);
35 を呼び出しglTexSubImage2D
て、35 枚すべての画像を big に追加しますglTexImage2D
。ここでは、説明を簡単にするために 1 つだけ書きました。それから最後に私はします
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, this->tileCoordList);
glTexCoordPointer(3, GL_FLOAT, 0, this->tileTextureCoordList);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_TEXTURE_2D);
今私が混乱しているのは、glTexSubImage2D
?? または、1回だけで十分です。テクスチャをバインドするものを理解していない実際の問題は、それで何かをしなければなりません。ありがとう。