次の方法で共有


アルファ テクスチャ ブレンディング

アルファ テクスチャ ブレンディング

Microsoft® Direct3D® では、プリミティブをレンダリングするとき、プリミティブのマテリアルまたはその頂点の色、ライティング情報に基づいてプリミティブの色を生成する。詳細については、「ライトとマテリアル」を参照すること。アプリケーションでテクスチャ ブレンディングが有効になっている場合、Direct3D は処理されたポリゴンのピクセル色の値を、既にフレーム バッファに格納されているピクセルと組み合わせなければならない。Direct3D では、次の公式を使って、プリミティブの画像の各ピクセルに対する最終色を決める。

FinalColor = TexelColor × SourceBlendFactor + PixelColor × DestBlendFactor

この公式で、FinalColor は、ターゲット レンダリング サーフェイスに出力される最後のピクセル色である。TexelColor は、カレント ピクセルに対応する入力色値 (テクスチャ フィルタリング後) を表す。Direct3D でテクセルをピクセルにマッピングする方法の詳細については、「テクスチャ フィルタリング」を参照すること。SourceBlendFactor は、最後に適用する入力色値の割合を決めるために Direct3D が使う計算値である。PixelColor は、プリミティブの画像内に現在格納されているピクセルの色である。DestBlendFactor は、最後にレンダリングされるピクセルで使われるカレント ピクセルの色の割合を表す。SourceBlendFactorDestBlendFactor の値の範囲は、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 レンダリング ステートを使ってブレンディング係数を制御する。IDirect3DDevice9::SetRenderState メソッドを呼び出して、第 1 引数の値としてレンダリング ステート値のいずれかを渡す。第 2 引数は D3DBLEND 列挙型のメンバでなければならない。