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 );