RGBA値でテクスチャをロードしようとしていますが、アルファ値はテクスチャをより白くし、透明度を調整しないようです。3Dシーンでこの問題について聞いたことがありますが、私は2D用のOpenGLを使用しています。とにかくこれを修正できますか?
私はOpenGLを初期化しています
glViewport(0, 0, winWidth, winHeight);
glDisable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
glClearColor(0, 0, 0, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, winWidth, 0, winHeight); // set origin to bottom left corner
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(1, 1, 1);
スクリーンショット:
色あせたドット画像は半透明である必要があります。黒のビットは完全に透明であると想定されています。ご覧のとおり、背後に透けて見えない画像があります。
そのテクスチャを生成するコードはかなり長いので、私が何をしたかを説明します。これは、unsignedchar型の40* 30*4配列です。4文字ごとに128に設定されます(50%透明にする必要がありますか?)。
次に、それをこの関数に渡し、データをテクスチャにロードします。
void Texture::Load(unsigned char* data, GLenum format) {
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, _texID);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, _w, _h, format, GL_UNSIGNED_BYTE, data);
glDisable(GL_TEXTURE_2D);
}
そして...私はちょうど問題を見つけたと思います。このコードでフルサイズのテクスチャを初期化していました:
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, _texID);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, tw, th, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glDisable(GL_TEXTURE_2D);
しかし、glTexImage2DもGL_RGBAである必要があると思いますか?2つの異なる内部フォーマットを使用できませんか?または、少なくともサイズの異なるもの(3バイトと4バイト)ではありませんか?GL_BGRは、このように初期化された場合でも正常に機能します...