- お知らせ -
  • 当wikiのプログラムコードの表示を直してみました(ついでに長い行があると全体が下にぶっ飛ぶのも修正)。不具合があればBBSまでご連絡下さい。

はじめに Edit

glBlendFuncについて。

実際の合成方法は、PhotoShop/レイヤーの計算方法についてを参照してください。

どういうものか Edit

要は、色の合成方法を指定するものです。

glBlendFunc(src_factor, dest_factor)
src = 元画像(テクスチャー)の色
dest = 描画先画像(つまり、画面バッファ)の色
color = 実際に画面に描画される色

とした場合、計算式的には、

color = src * src_factor + dest * dest_factor

となります。

実際の例 Edit

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

とした場合、

src_factor = GL_SRC_ALPHA = α
dest_factor = GL_ONE_MINUS_SRC_ALPHA = 1- α
color = src * α + dest * (1 - α) 

となり、これは、単純なアルファブレンドですね。

他、様々な合成方法(例えば、加算など)は、PhotoShop/レイヤーの計算方法についてを参照してください。

注意点 Edit

実際に、特殊な描画を行う場合は、GL_BLENDを有効にし、
Zバッファのテストを無効にしないと変になります。
(でも、Zバッファのテストは場合によっては、有効にする必要があるかもだね。ちゃんとした3Dなら。その場合、オブジェクトごとに、Zソートしておいて、最後に描画するとか工夫がいりますな)

例えば、アルファブレンドを行う場合、

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

などとします。
特殊な描画が、終わったら、

glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);

として、元に戻します。

参考リンク Edit




Front page   Edit Freeze Diff Backup Upload Copy Rename Reload   New Pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2007-05-17 Thu 19:35:32 JST (4571d)