OpenGLの画像合成時のブレンドモードよく使うもの抜粋

Author: mucho

ナツいアツが終わりましたねー。こんにちはムーチョです。

さて今回は、OpenGLのブレンドモードについて。
PhotoShopなど画像処理系ではよくある簡単な処理なのですが、
わざわざOpenGLでやろうとするとさりげなく面倒で覚えにくいのでメモしてみました。
PhotoShopで言う乗算かスクリーンと反転処理だと思うのでその辺を中心に。

アルファブレンド
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

反転
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);

加算
glBlendFunc(GL_ONE, GL_ONE);

加算+アルファ(PhotoShop的スクリーン)
glBlendFunc(GL_SRC_ALPHA, GL_ONE);

スクリーン(PhotoShop的 比較(明))
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE);

乗算
glBlendFunc(GL_ZERO, GL_SRC_COLOR);

乗算+アルファ
dst = dst * src * alpha
= (dst * src) * alpha
glBlendFunc(GL_ZERO, GL_SRC_COLOR);
glBlendFunc(GL_ZERO, GL_SRC_ALPHA);

これじゃ分かりにくいかな??と思い、
Visual glBlendFunc Toolで結果を書き出してみました。


アルファブレンド
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);


反転
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);


加算
glBlendFunc(GL_ONE, GL_ONE);


加算+アルファ(PhotoShop的スクリーン)
glBlendFunc(GL_SRC_ALPHA, GL_ONE);


スクリーン(PhotoShop的 比較(明))
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE);


乗算
glBlendFunc(GL_ZERO, GL_SRC_COLOR);

もっともっと!という方はこちらも参考にどうぞ。
http://d.hatena.ne.jp/melpon/20070824/p1