0

次を使用してPNGをロードしています:

theImage = [NSBitmapImageRep imageRepWithContentsOfFile:imagePath];

そこから gl テクスチャを正常に作成し、透明度なしで正しくレンダリングできます。ただし、次を使用してブレンドを切り替えると:

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

テクスチャは正しい透明な背景でレンダリングされますが、イメージの色が正しくありません。

ブレンド機能でいくつかのオプションを試しましたGL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_DST_ALPHA, など.

画像データのビットを並べ替える必要があるかもしれない、おそらくチャンネルが混同されているかもしれないと教えられましたが、その場合、ブレンドがオフになっていると正しくレンダリングされるとは思いません。

または、libPNG を使用することもできますが、NSBitmapImageRep可能であれば使用してみたいと思います。

4

1 に答える 1

4

スクリーンショットを提供するのはどうですか?


とにかく、単純な透明度チャネルのブレンディングでは、ブレンディング関数はどちらにしても間違っています。どちらかである必要があります

  • 通常のアルファ:glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

また

  • 乗算済みアルファ:glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
于 2011-08-03T10:14:32.257 に答える