4

iPhone で openGL ES を使用すると、アルファ ブレンディングの結果が正しくないという問題があります。

これは、テクスチャ オブジェクトを作成するための私のコードです。

glGenTextures(1, &tex_name);
glBindTexture(GL_TEXTURE_2D, tex_name);
glTextImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex_width, tex_height, GL_RGBA, GL_UNSIGNED_BYTE, tex_data);

「tex_data」は、zlib でパックされた生の RGBA8888 データからロードされます。デバッガーで確認したところ、正常にロードされます。

これは、レンダリング前にテクスチャを設定するための私のコードです:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glBindTexture(GL_TEXTURE_2D, tex_name);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

私が期待したものとここにあるもののサンプルをアップロードしました: sample . サンプルでは、​​下部のテクスチャのほとんどが真っ黒で、不透明度は 70% です。ただし、openGL はグレーとしてレンダリングします。この問題は、ブレンドを使用するすべてのテクスチャに影響します。

OGLES PVRVFrame を使用して Windows でコードをテストしたところ、結果は期待どおりでした。黒は黒としてレンダリングされます。

4

2 に答える 2

4

問題が見つかりました。EAGLView の CAEAGLLayer の opaque プロパティを YES に設定するのを忘れていました。

于 2009-07-08T23:49:56.250 に答える
0

これは役に立ちますか?glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) これは、背景に対して両方をブレンドするのではなく、2つをブレンドするだけだと思います。

わからない場合は申し訳ありません。

于 2009-07-08T22:50:30.863 に答える