Microsoft DirectX 8.0 (C++)

スペキュラ ライト マップ

光源で照らしたときに輝くオブジェクト (反射性の高いマテリアルを使用するオブジェクト) は、スペキュラ ハイライトを受け取る。場合によっては、ライティング モジュールで生成されたスペキュラ ハイライトは正確でない場合もある。より効果的なハイライトを生成するために、多くの Microsoft® Direct3D® アプリケーションではプリミティブにスペキュラ ライト マップを適用する。

スペキュラ ライト マッピングを実行するには、まずスペキュラ ライト マップをプリミティブの既存のテクスチャに合わせて乗算する。次に、モノクロまたは RGB ライト マップを追加する。

次のサンプル コードは、C++ でのこの処理を示している。

// この例では、d3dDevice は IDirect3DDevice8 インターフェイスへの
// 有効なポインタであると仮定している。
// lptexBaseTexture は、テクスチャへの有効なポインタである。
// lptexSpecLightMap は、RGB スペキュラ ライト マップ データを含む
// テクスチャへの有効なポインタである。
// lptexLightMap は、RGB ライト マップ データを含む
// テクスチャへの有効なポインタである。

// ベース テクスチャを設定する。
d3dDevice->SetTexture(0, lptexBaseTexture );

// ベース テクスチャ処理と引数を設定する。
d3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE );
d3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
d3dDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );

// スペキュラ ライト マップを設定する。
d3dDevice->SetTexture(1, lptexSpecLightMap);

// スペキュラ ライト マップ処理と引数を設定する。
d3dDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_ADD );
d3dDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
d3dDevice->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT );
 
// RGB ライト マップを設定する。
d3dDevice->SetTexture(2, lptexLightMap);
 
// RGB ライト マップ処理と引数を設定する。
d3dDevice->SetTextureStageState(2,D3DTSS_COLOROP, D3DTOP_MODULATE);
d3dDevice->SetTextureStageState(2,D3DTSS_COLORARG1, D3DTA_TEXTURE );
d3dDevice->SetTextureStageState(2,D3DTSS_COLORARG2, D3DTA_CURRENT );