OpenGL de プログラミング - ブレンド処理
現在地 >> メニュー >> 基本編11 >> ブレンド処理

ブレンド処理


ブレンド処理は、
すでに描画されているピクセルの上に、これから描画するもののピクセルの色を混ぜる処理である。

そして、その混ぜ具合を決定するのがRGBAの4色の中の4つ目の要素「Alpha値」である。

これは
  • Alpha = 0 → 完全な透明
  • Alpha = 1 → 完全な不透明
という意味である。

計算式


色をブレンドする式は以下の通り。
[見える色] = [これから塗る色]*[ブレンド係数:S] + [現在の色]*[ブレンド係数:D]
(R, G, B, A) = (Rs*Sr + Rd*Dr, Gs*Sg + Gd*Dg, Bs*Sb + Bd*Db, As*Sa + Ad*Da)
一般には
  • これから塗る色を「source」
  • 現在の色の方を「destination」
という。

ブレンディング係数


このブレンディング係数が色を混ぜるための要素となっている。

ブレンディング係数 はたいていの場合、
  • (Sr, Sg, Sb, Sa) = (As, As, As, As) → ソース側のAlpha値
  • (Dr, Dg, Db, Da) = (1-As, 1-As, 1-As, 1-As)
として
(R,G,B,A)= (Rs*As + Rd*(1 - As), Gs*As + Gd*(1 - As), Bs*As + Bd*(1 - As), As*As + Ad*(1 - As))
を計算式にする事が多い。

OpenGLでの描画


OpenGLでの描画手順でもっとも簡単な方法は
  1. 計算式を設定
  2. 半透明要素を描画(デプスバッファはOFFにする)
である。


― メモ ―
より正しく描画するには、
  1. 全体を描画
  2. 半透明要素を描画(より遠いものから順に描画)
となる。

例えば2つのポリゴンA,Bがあって、
「A」の方が視点に近い場合、「B」を描画してから「A」を描画するのが正しい。

つまり、それらのポリゴンの後ろから光が透過してやって来る時、
現実世界で考えれば、より遠くの「ポリゴンB」を通過してから「ポリゴンA」を通過し、
視点へやってくるはずである。

故に、
「デプス値で半透明物体をソートし、全体を描画した後、デプスバッファをONにしたまま描画する」
のが正確なやり方となる。

使い方


ブレンド処理を使うには、
色設定を「glColor3*()」からglColor4*()」にする、
等のように、「3色指定」から、「4色指定」にする。


  1. 計算式を決定して
  2. 有効化する


[例]

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


サンプルコード >> ブレンド処理::まとめコード