glBlendFunc 関数
glBlendFunc 関数は、ピクセル算術演算を指定します。
構文
void WINAPI glBlendFunc(
GLenum sfactor,
GLenum dfactor
);
パラメーター
-
sfactor
-
赤、緑、青、アルファのソース ブレンド係数の計算方法を指定します。 GL_ZERO、GL_ONE、GL_DST_COLOR、GL_ONE_MINUS_DST_COLOR、GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA、GL_DST_ALPHA、GL_ONE_MINUS_DST_ALPHA、GL_SRC_ALPHA_SATURATEの 9 つのシンボリック定数を使用できます。
-
dfactor
-
赤、緑、青、アルファの宛先ブレンド係数の計算方法を指定します。 GL_ZERO、GL_ONE、GL_SRC_COLOR、GL_ONE_MINUS_SRC_COLOR、GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA、GL_DST_ALPHA、GL_ONE_MINUS_DST_ALPHAの 8 つのシンボリック定数を使用できます。
戻り値
この関数は値を返しません。
エラー コード
glGetError 関数では、次のエラー コードを取得できます。
名前 | 意味 |
---|---|
|
sfactor または dfactor は受け入れ可能な値ではありません。 |
|
glBegin の呼び出しと glEnd の対応する呼び出しの間に関数が呼び出されました。 |
解説
RGB モードでは、受信 (ソース) RGBA 値とフレームバッファーに既に存在する RGBA 値 (宛先値) をブレンドする関数を使用してピクセルを描画できます。 既定では、ブレンドは無効になっています。 ブレンドを有効または無効にするには、GL_BLEND引数と共に glEnable と glDisable を使用します。
有効にすると、 glBlendFunc によってブレンドの操作が定義されます。 sfactor パラメーターは、ソース カラー コンポーネントのスケーリングに使用される 9 つのメソッドのうちどれを指定します。 dfactor パラメーターは、変換先の色コンポーネントのスケーリングに使用される 8 つのメソッドのうちどれを指定します。 次の表に、考えられる 11 のメソッドについて説明します。 各メソッドでは、赤、緑、青、アルファの 4 つのスケール ファクターをそれぞれ 1 つずつ定義します。
表および後続の数式では、ソースと変換先の色コンポーネントは (R? 、 G? 、 B? 、 A? ) および (Rd 、 Gd 、 Bd 、 Ad ) と呼ばれます。 これらは、0 から (kR 、 kG 、 kR 、 kA ) の間の整数値を持つことがわかります。
kR = 2mR - 1
kG = 2mG - 1
kB = 2mB - 1
kA = 2mA - 1
および (mR 、 mG 、 mB 、 mA ) は、赤、緑、青、アルファビットプレーンの数です。
ソースとターゲットのスケール ファクターは、(sR 、 sG 、 sB 、 sA ) および (dR 、 dG 、 dB 、 dA ) と呼ばれます。 表に記載されているスケール ファクター (fR 、 fG 、 fB 、 fA ) は、ソース要因または変換先係数を表します。 すべてのスケール ファクターの範囲は [0,1] です。
パラメーター | (fR , fG , fB , fA ) |
---|---|
GL_ZERO | (0,0,0,0) |
GL_ONE | (1,1,1,1) |
GL_SRC_COLOR | (R? / kR , G? / kG , B? / kB , A? / kA ) |
GL_ONE_MINUS_SRC_COLOR | (1,1,1,1,1) - (R? / kR , G? / kG , B? / kB , A? / 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 | (A? / kA , A? / kA , A? / kA , A? / kA ) |
GL_ONE_MINUS_SRC_ALPHA | (1,1,1,1,1) - (A? / kA , A? / kA , A? / kA , A? / kA ) |
GL_DST_ALPHA | (Ad / kA , Ad / kA , Ad / kA , Ad / kA ) |
GL_ONE_MINUS_DST_ALPHA | (1,1,1,1) - (A d / kA , Ad / kA , Ad / kA , Ad / kA ) |
GL_SRC_ALPHA_SATURATE | (i,i,i, 1) |
この表で、
i = min (A? , kA - Ad ) / kA
RGBA モードで描画するときにピクセルのブレンドされた RGBA 値を決定するために、システムは次の式を使用します。
R (d) = min( kR , R?sR R + ddR )
G (d) = min( kG , G?sG G + Gd dG )
B (d) = min( kB, B?sB B + ddB )
A (d) = min( kA , A?sA A + ddA )
上記の数式の明らかな精度にもかかわらず、ブレンドは不正確な整数値で動作するため、算術ブレンドは正確に指定されていません。 ただし、1 に等しいブレンド係数は、その多重度を変更しないことが保証され、ブレンド係数が 0 に等しいと、その多重度が 0 に減少します。 したがって、たとえば、 sfactor がGL_SRC_ALPHAされている場合、 dfactor はGL_ONE_MINUS_SRC_ALPHAされ、 A?が kA と等しい場合、数式は単純な置換に減ります。
Rd = R?
Gd = G?
Bd = B?
Ad = A?
例
透過性は、最も遠いものから最も近いものに並べ替えられたプリミティブを持つ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) を使用して実装するのが最適です。 この透明度の計算では、フレームバッファーにアルファ ビットプレーンが存在する必要はありません。
また、glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) を使用して、アンチエイリアシングされたポイントと線を任意の順序でレンダリングすることもできます。
ポリゴンアンチエイリアシングを最適化するには、 glBlendFunc(GL_SRC_ALPHA_SATURATE, GL_ONE) を使用し、ポリゴンを最も近いものから最も遠いものに並べ替えます。 (ポリゴンアンチエイリアシングの詳細については、 glEnable の GL_POLYGON_SMOOTH 引数を参照してください)。このブレンド関数を正しく動作させるために存在する必要がある宛先アルファ ビットプレーンは、蓄積されたカバレッジを格納します。
受信 (ソース) アルファは、完全な不透明度を表す 1.0 (KA ) から 0.0 (0) までの範囲の素材の不透明度であり、完全な透過性を表します。
描画に複数のカラー バッファーを有効にすると、有効になっている各バッファーが個別にブレンドされ、バッファーの内容がコピー先の色に使用されます。 ( glDrawBuffer を参照してください)。
ブレンドは RGBA レンダリングにのみ影響します。 カラー インデックス レンダラーでは無視されます。
次の関数は 、glBlendFunc に関連する情報を取得します。
引数GL_BLEND_SRCを含む glGet
引数GL_BLEND_DSTを含む glGet
引数GL_BLENDを使用した glIsEnabled
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー |
Windows 2000 Server [デスクトップ アプリのみ] |
ヘッダー |
|
ライブラリ |
|
[DLL] |
|