2 つのテクスチャを読み込んでから、表示機能で 2 つのテクスチャを切り替えようとしています。SOIL ライブラリを使用して、テクスチャを次のようにロードしています。
tex_2 = SOIL_load_OGL_texture
(
"s9.png",
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_MIPMAPS | SOIL_FLAG_COMPRESS_TO_DXT
);
tex_1 = SOIL_load_OGL_texture
(
"s8.png",
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_MIPMAPS | SOIL_FLAG_COMPRESS_TO_DXT
);
そして、私は使用します
glBindTexture(GL_TEXTURE_2D, tex_1)
or
glBindTexture(GL_TEXTURE_2D, tex_2);
2 つを切り替えるには。問題は、それらを間違ってロードしているに違いなく、その方法がわからないことです。最後にロードしたテクスチャ (上記のコードの tex_1) は、glBindTexture で切り替えようとしたときに tex_1 と tex_2 の両方で得られるテクスチャです。何か案は?
teaxture をロードする前に、ブレンドを設定し、テクスチャとスプライトをオンにします
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE);
glEnable(GL_TEXTURE_2D);
glEnable(GL_POINT_SPRITE);
glTexEnvi(GL_POINT_SPRITE, GL_COORD_REPLACE, GL_TRUE);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
次に、表示関数で、描画するすべてのポイントをループし、glVertex3f でポイントを描画する前に現在のテクスチャを変更しようとします。
for(int i=0; i<num_particles; i++)
{
//select texture to use
if(class[i] == 2.0f)
glBindTexture(GL_TEXTURE_2D, tex_2);
else
glBindTexture(GL_TEXTURE_2D, tex_1);
glVertex3f(posn[3*i], posn[3*i+1], posn[3*i+2]);
}
目標は、2 種類のポイントがあり、各ポイントで描画されるスプライトは、ポイントが属するクラスに依存することです。