openglのblendについて

glBlendFuncに渡す引数の数が多すぎて把握しきれていない。
glのコードをラッピングはしていないけれど、とりあえずblendingもできるということで。

code

(use gl.processing)

(with-simple-draw (200 200)

  (blend-info)

  (background 0 0 0)
  (gl-enable GL_BLEND)
  (gl-blend-func GL_ONE GL_ONE)
  (translate 0 -50)
  (fill 255 0 0 123)
  (rect 50 100 50 50)
  (fill 0 255 0 123)
  (rect 100 100 50 50)
  (fill 0 0 255 123)
  (triangle 100 100 50 150 150 150)
  (triangle 100 200 50 150 150 150))

追記

こちらの方が自然かも。

  (gl-blend-func GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA)

twitpicにもサンプルがあります。http://twitpic.com/2voya4

blend-infoについて

使い方と変数名を忘れてしまうので自分用のメモを出力してくれる関数が欲しい>blend-info
こんな出力を返します。メモです。

GL_ZERO	(0,0,0,0)
GL_ONE	(1,1,1,1)
GL_SRC_COLOR	(Rs/kR ,Gs/kG,Bs/kB,As/kA)
GL_ONE_MINUS_SRC_COLOR	(1,1,1,1)-(Rs/kR,Gs/kG,Bs/kB,As/kA)
GL_DST_COLOR	(Rd/kR,Gd/kG,Bd/kB,Ad/kA)
GL_ONE_MINUS_DST_COLOR	(1,1,1,1)-(Rd/kR,Gd/kG,Bd/kB,Ad/kA)
GL_SRC_ALPHA	(As/kA,As/kA,As/kA,As/kA)
GL_ONE_MINUS_SRC_ALPHA	(1,1,1,1)-(As/kA,As/kA,As/kA,As/kA)
GL_DST_ALPHA	(Ad/kA,Ad/kA,Ad/kA,Ad/kA)
GL_ONE_MINUS_DST_ALPHA	(1,1,1,1)-(Ad/kA,Ad/kA,Ad/kA,Ad/kA)
GL_SRC_ALPHA_SATURATE	(i,i,i,1)

//アルファ合成
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//加算合成
    glBlendFunc(GL_SRC_ALPHA, GL_ONE);
//乗算合成
    glBlendFunc(GL_ZERO, GL_SRC_COLOR);
//反転合成
    glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);
//スクリーン合成
    glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE);
//排他的論理和合成
    glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);