Platform SDK: DirectX

スペキュラ ライト マップ

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

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

[C++]

次のコードは、C++ におけるこの処理を示す。

// この例では、lpD3DDev は IDirect3DDevice7 インターフェイスへの
// 有効なポインタであるとする。
// lptexBaseTexture は、テクスチャへの有効なポインタである。
// lptexSpecLightMap は、RGB スペキュラ ライト マップ データを含む
// テクスチャへの有効なポインタである。
// lptexLightMap は、RGB ライト マップ データを含む
// テクスチャへの有効なポインタである。
 
// ベース テクスチャを設定する。
lpD3DDev->SetTexture(0,lptexBaseTexture );
 
// ベース テクスチャ処理と引数を設定する。
lpD3DDev->SetTextureStageState(0,D3DTSS_COLOROP,
       D3DTOP_MODULATE );
lpD3DDev->SetTextureStageState(0,D3DTSS_COLORARG1, D3DTA_TEXTURE );
lpD3DDev->SetTextureStageState(0,D3DTSS_COLORARG2, D3DTA_DIFFUSE );
 
// スペキュラ ライト マップを設定する。
lpD3DDev->SetTexture(1,lptexSpecLightMap );
 
// スペキュラ ライト マップと引数を設定する。
lpD3DDev->SetTextureStageState(1,D3DTSS_COLOROP,
       D3DTOP_ADD );
lpD3DDev->SetTextureStageState(1,D3DTSS_COLORARG1, D3DTA_TEXTURE );
lpD3DDev->SetTextureStageState(1,D3DTSS_COLORARG2, D3DTA_CURRENT );
 
// RGB ライト マップを設定する。
lpD3DDev->SetTexture(2,lptexLightMap);
 
// RGB ライト マップ処理と引数を設定する。
lpD3DDev->SetTextureStageState(2,D3DTSS_COLOROP, D3DTOP_MODULATE);
lpD3DDev->SetTextureStageState(2,D3DTSS_COLORARG1, D3DTA_TEXTURE );
lpD3DDev->SetTextureStageState(2,D3DTSS_COLORARG2, D3DTA_CURRENT );
[Visual Basic]

次の Visual Basic コードは、この処理を示す。

' この例では、d3dDev は Direct3DDevice7 オブジェクトへの
' 有効な参照であるとする。
' texBaseTexture はテクスチャへの有効な参照である。
' texSpecLightMap は、RGB スペキュラ ライト マップ データを含む
' テクスチャへの有効な参照である。
' texLightMap は、RGB ライト マップ データを含む
' テクスチャへの有効な参照である。
 
' ベース テクスチャを設定する。
Call d3dDev.SetTexture(0, texBaseTexture)
 
' ベース テクスチャ処理と引数を設定する。
Call d3dDev.SetTextureStageState(0, D3DTSS_COLOROP, _
D3DTOP_MODULATE );
Call d3dDev.SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE)
Call d3dDev.SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE)
 
' スペキュラ ライト マップを設定する。
Call d3dDev.SetTexture(1, texSpecLightMap)
 
' スペキュラ ライト マップ処理と引数を設定する。
Call d3dDev.SetTextureStageState(1, D3DTSS_COLOROP, _
D3DTOP_ADD)
Call d3dDev.SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE)
Call d3dDev.SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT)
 
' RGB ライト マップを設定する。
Call d3dDev.SetTexture(2, texLightMap)
 
' RGB ライト マップ処理と引数を設定する。
Call d3dDev.SetTextureStageState(2, D3DTSS_COLOROP, D3DTOP_MODULATE)
Call d3dDev.SetTextureStageState(2, D3DTSS_COLORARG1, D3DTA_TEXTURE)
Call d3dDev.SetTextureStageState(2, D3DTSS_COLORARG2, D3DTA_CURRENT)