Microsoft DirectX 8.0 (C++) |
Microsoft® Direct3D® では、プリミティブをレンダリングするとき、プリミティブのマテリアルまたはその頂点の色、およびライティング情報に基づいてプリミティブの色を生成する。詳細については、「ライティングとマテリアルの概要」を参照すること。アプリケーションでテクスチャ ブレンディングが有効になっている場合、Direct3D は処理されたポリゴンのピクセル カラーの値を、既にフレーム バッファに格納されているピクセルと組み合わせなければならない。Direct3D では、次の公式を使用して、プリミティブの画像の各ピクセルに対する最終色を決める。
FinalColor = TexelColor × SourceBlendFactor + PixelColor × DestBlendFactor
この公式で、FinalColor は、ターゲット レンダリング サーフェスに出力される最後のピクセル カラーである。TexelColor は、カレント ピクセルに対応する入力カラー値 (テクスチャ フィルタリング後) を表す。Direct3D でテクセルをピクセルにマッピングする方法の詳細については、「テクスチャ フィルタリング」を参照すること。SourceBlendFactor は、最後に適用する入力カラー値の割合を決めるために Direct3D が使用する計算値である。PixelColor は、プリミティブの画像内に現在格納されているピクセルの色である。DestBlendFactor は、最後にレンダリングされるピクセルで使用されるカレント ピクセルの色の割合を表す。SourceBlendFactor と DestBlendFactor の値は、0.0 と 1.0 を含む 0.0 〜 1.0 である。
上の公式からわかるように、SourceBlendFactor が D3DBLEND_ONE で DestBlendFactor が D3DBLEND_ZERO の場合、最後にレンダリングされるピクセルは透明度がないものとしてレンダリングされる。SourceBlendFactor が D3DBLEND_ZERO で DestBlendFactor が D3DBLEND_ONE の場合は、テクスチャは完全に透明になる。これらの係数に上記以外の値を設定した場合は、最後にレンダリングされるピクセルはある程度の透明性のある色とブレンドされる。
テクスチャ フィルタリング後は、すべてのピクセル カラー値は、赤色、緑色、および青色のカラー値を持っている。デフォルトでは、Direct3D は D3DBLEND_SRCALPHA を SourceBlendFactor として、D3DBLEND_INVSRCALPHA を DestBlendFactor として使用する。したがって、アプリケーションでは、テクスチャのアルファ値を設定することで処理されたピクセルの透明度を制御できる。
C++ で開発するアプリケーションでは、D3DRS_SRCBLEND および D3DRS_DESTBLEND レンダリング ステートを使用してブレンディング係数を制御する。IDirect3DDevice8::SetRenderState メソッドを呼び出し、第 1 パラメータの値としてレンダリング ステート値のいずれかを渡す。第 2 パラメータは、D3DBLEND 列挙型のメンバでなければならない。