Platform SDK: DirectX |
色のアルファ値は透明度を制御する。アルファ ブレンディングを有効にすると、あるサーフェスの色、マテリアル、およびテクスチャを透明度とブレンドして、ほかのサーフェスに適用できる。詳細については、「アルファ テクスチャ ブレンディング」および「マルチパス テクスチャ ブレンディング」を参照すること。
C++ で記述されたアプリケーションでは、D3DRENDERSTATE_ALPHABLENDENABLE レンダリング ステートを使用してアルファ透明ブレンディングを有効にする。Direct3D API では、さまざまな種類のアルファ ブレンディングを使用できる。ただし、ユーザーの 3D ハードウェアが Direct3D で可能なブレンディング ステートのすべてに対応するとは限らないので注意が必要である。
実行されるアルファ ブレンディングの種類は、D3DRENDERSTATE_SRCBLEND および D3DRENDERSTATE_DESTBLEND レンダリング ステートによって異なる。転送元および転送先のブレンディング ステートはペアで使用する。次のコードは、転送元のブレンディング ステートを D3DBLEND_SRCCOLOR に設定し、転送先のブレンディング ステートを D3DBLEND_INVSRCCOLOR に設定する方法を示す。
// このコードでは、lpD3DDevice は IDirect3DDevice7 インターフェイスへの // 有効なポインタであるとする。 // 転送元のブレンディング ステートを設定する。 lpD3DDevice->SetRenderState(D3DRENDERSTATE_SRCBLEND, D3DBLEND_SRCCOLOR); // 転送先のブレンディング ステートを設定する。 lpD3DDevice->SetRenderState(D3DRENDERSTATE_DESTBLEND, D3DBLEND_INVSRCCOLOR);
この呼び出しの結果、Direct3D は、転送元の色 (現在位置座標でのレンダリング ターゲットのプリミティブの色) および転送先の色 (フレーム バッファ内の現在位置座標の色) の間で線形ブレンディングを実行する。この処理によって、色合いを持つガラスのような外観になる。転送先オブジェクトの色の一部は、転送元オブジェクトから伝わったように見える。その他の部分は吸収されたように見える。
転送元および転送先のブレンディング ステートの設定を変えると、霧やほこりの中でオブジェクトが輝いているような外観になる。たとえば、アプリケーションで、炎、電磁力界、プラズマ光線、またはぼんやりした中で輝いているようなオブジェクトをモデリングする場合、転送元および転送先のブレンディング ステートを D3DBLEND_ONE に設定する。
また、アルファ ブレンディングは 3D シーンのライティングを制御する。これはライト マッピングと呼ばれることもある。転送元のブレンディング ステートを D3DBLEND_ZERO に設定し、転送先のブレンディング ステートを D3DBLEND_SRCALPHA に設定すると、転送元のアルファ情報に従ってシーンが暗くなる。転送元のプリミティブは、フレーム バッファの内容をスケーリングするライト マップとして使用され、必要に応じてシーンを暗くする。これによって、モノクロのライト マッピングが生成される。
カラー ライト マッピングは、転送元のアルファ ブレンディング ステートを D3DBLEND_ZERO に設定し、転送先のブレンディング ステートを D3DBLEND_SRCCOLOR に設定することで実現できる。
Direct3D デバイスがディスプレイ ハードウェアでサポートされている場合は、アルファ値点描を実行できる。「D3DRENDERSTATE_STIPPLEDALPHA」を参照すること。アプリケーションで RGB またはランプ ソフトウェア エミュレーション デバイスを作成する場合、Direct3D はこの列挙値を無視する。
Visual Basic アプリケーションでは、D3DRENDERSTATE_ALPHABLENDENABLE レンダリング ステートを使用してアルファ透明ブレンディングを有効にする。Direct3D API では、さまざまな種類のアルファ ブレンディングを使用できる。ただし、ユーザーの 3D ハードウェアが Direct3D で可能なブレンディング ステートのすべてに対応するとは限らないので注意が必要である。
実行されるアルファ ブレンディングの種類は、D3DRENDERSTATE_SRCBLEND および D3DRENDERSTATE_DESTBLEND レンダリング ステートによって異なる。転送元および転送先のブレンディング ステートはペアで使用する。次のコードは、転送元のブレンディング ステートを D3DBLEND_SRCCOLOR に設定し、転送先のブレンディング ステートを D3DBLEND_INVSRCCOLOR に設定する方法を示す。
' このコードでは、D3DDevice に Direct3DDevice7 オブジェクトへの ' 参照が格納されているとする。 ' 転送元のブレンディング ステートを設定する。 Call D3DDevice.SetRenderState(D3DRENDERSTATE_SRCBLEND, _ D3DBLEND_SRCCOLOR); ' 転送先のブレンディング ステートを設定する。 Call D3DDevice.SetRenderState(D3DRENDERSTATE_DESTBLEND, _ D3DBLEND_INVSRCCOLOR);
この呼び出しの結果、Direct3D は、転送元の色 (現在位置座標でのレンダリング ターゲットのプリミティブの色) および転送先の色 (フレーム バッファ内の現在位置座標の色) の間で線形ブレンディングを実行する。この処理によって、色合いを持つガラスのような外観になる。転送先オブジェクトの色の一部は、転送元オブジェクトから伝わったように見える。その他の部分は吸収されたように見える。
転送元および転送先のブレンディング ステートの設定を変えると、霧やほこりの中でオブジェクトが輝いているような外観になる。たとえば、アプリケーションで、炎、電磁力界、プラズマ光線、またはぼんやりした中で輝いているようなオブジェクトをモデリングする場合、転送元および転送先のブレンディング ステートを D3DBLEND_ONE に設定する。
また、アルファ ブレンディングは 3D シーンのライティングを制御する。これはライト マッピングと呼ばれることもある。転送元のブレンディング ステートを D3DBLEND_ZERO に設定し、転送先のブレンディング ステートを D3DBLEND_SRCALPHA に設定すると、転送元のアルファ情報に従ってシーンが暗くなる。転送元のプリミティブは、フレーム バッファの内容をスケーリングするライト マップとして使用され、必要に応じてシーンを暗くする。これによって、モノクロのライト マッピングが生成される。
カラー ライト マッピングは、転送元のアルファ ブレンディング ステートを D3DBLEND_ZERO に設定し、転送先のブレンディング ステートを D3DBLEND_SRCCOLOR に設定することで実現できる。
Direct3D デバイスがディスプレイ ハードウェアでサポートしている場合は、アルファ値点描を実行できる。「D3DRENDERSTATE_STIPPLEDALPHA」を参照すること。アプリケーションで RGB またはランプ ソフトウェア エミュレーション デバイスを作成する場合、Direct3D はこの列挙値を無視する。