Platform SDK: DirectX |
一部の古い 3D アクセラレータ ボードでは、転送先ピクセルのアルファ値を使用するテクスチャ ブレンディングをサポートしていない場合がある (「アルファ テクスチャ ブレンディング」を参照すること)。これらのアダプタでは、一般にマルチ テクスチャ ブレンディングもサポートしていない。このようなアダプタでアプリケーションを実行する場合は、マルチパス テクスチャ ブレンディングを使用してモノクロ ライト マッピングを実行できる。
モノクロ ライト マッピングを実行するには、アプリケーションでライティング情報をライト マップ テクスチャのアルファ データに格納する。プログラムは、Direct3D のテクスチャ フィルタリング機能を使用して、プリミティブ画像の各ピクセルから、ライト マップの対応するテクセルへのマッピングを実行する。プログラムで、転送元ブレンディング係数を対応するテクセルのアルファ値に設定する。
次の C++ コードは、アプリケーションでテクスチャをモノクロ ライト マップとして使用する方法を示す。
// この例では、lpD3DDev は IDirect3DDevice7 インターフェイスへの有効なポインタで、 // lptexLightMap はモノクロ ライト マップ データを含むテクスチャへの // 有効なポインタであるとする。 // ライト マップ テクスチャをカレント テクスチャとして設定する。 lpD3DDev->SetTexture(0,lptexLightMap); // 色処理を設定する。 lpD3DDev->SetTextureStageState(0,D3DTSS_COLOROP, D3DTOP_SELECTARG1); // 引数 1 を色処理に設定する。 lpD3DDev->SetTextureStageState(0,D3DTSS_COLORARG1, D3DTA_TEXTURE | D3DTA_ALPHAREPLICATE);
次の Visial Basic コードは、アプリケーションでテクスチャをモノクロ ライト マップとして使用する方法を示す。
' この例では、d3dDev は Direct3DDevice7 オブジェクトへの有効な参照であり、 ' texLightMap はモノクロ ライト マップ データを含む DirectDrawSurface7 テクスチャへの ' 有効な参照であるとする。 ' ライト マップ テクスチャをカレント テクスチャとして設定する。 Call d3dDev.SetTexture(0, texLightMap) ' 色処理を設定する。 Call d3dDev.SetTextureStageState(0, D3DTSS_COLOROP, _ D3DTOP_SELECTARG1); ' 引数 1 を色処理に設定する。 Call d3dDev.SetTextureStageState(0, D3DTSS_COLORARG1, _ D3DTA_TEXTURE | D3DTA_ALPHAREPLICATE);
転送先アルファ ブレンディングをサポートしていないディスプレイ アダプタは、通常マルチ テクスチャ ブレンディングをサポートしていないので、この例では、すべての 3D アクセラレータ カードで使用できるライト マップを最初のテクスチャとして設定している。また、この例では、テクスチャのブレンディング ステージに対するカラー値を設定して、テクスチャ データをプリミティブの既存の色とブレンドしている。その次に、入力データとして最初のテクスチャとプリミティブの既存の色を選択している。