緑の背景に透明な背景を持つスプライトを表示する簡単なコードを書いています。今、スプライトに問題があります。メインの背景には背景がなくても表示されるはずですが、色付きの背景があります (色を変更できるのでバグではありません)。
私には思えますが、問題は、テクスチャが色付きのクワッドにマップされると、すべてのアルファ値がクワッドの色の値と同じに設定されることです。
- PNG画像は問題なく、透明な背景を持っています
- テクスチャの背後にある色を判断できるので、インポートの問題ではないアルファチャンネルで画像を移植します
- クワッドブレンド全体がOKだから、私のブレンディングは大丈夫なはずです
ここに私のテクスチャとブレンディングコード:
//Texture Configuration
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glGenTextures(10, texNo);
glBindTexture(GL_TEXTURE_2D, texNo[0]);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glEnable(GL_TEXTURE_2D);
sfTexture[0].loadFromFile("image.png");
sf::Texture::bind(&sfTexture[0]);
//Blending
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
そして私の描画コード:
glBegin(GL_QUADS);
glColor3f(0,1,0);
glVertex2d(0,0);
glVertex2d(220,0);
glVertex2d(220,300);
glVertex2d(0,300);
glColor4f(1, 0, 0, 1);
glBindTexture(GL_TEXTURE_2D, texNo[0]);
glTexCoord2f(0,1); glVertex2d(xpos+0,ypos+0);
glTexCoord2f(1,1); glVertex2d(xpos+30,ypos+0);
glTexCoord2f(1,0); glVertex2d(xpos+30,ypos+30);
glTexCoord2f(0,0); glVertex2d(xpos+0,ypos+30);
//glDisable(GL_BLEND);
glEnd();
更新: GL_DECAL の代わりに GL_MODULATE を試しました
ブレンドなしの GL_MODULATE を使用した画像: ブレンド なしの GL_MODULATE
GL_MODULATE をブレンドした画像: GL_MODULATE をブレンドした画像