Platform SDK: DirectX

ディフューズ ライト マップ

光源で照らしたとき、光沢のないサーフェスはディフューズ ライトを放つ。ディフューズ ライトの輝きは、光源からの距離、およびサーフェス法線と光源の方向ベクトルとの角度によって異なる。ライティング計算によってシミュレートするディフューズ ライトのエフェクトは一般的なものである。

[C++]

テクスチャ ライト マップを使用してディフューズ ライトをシミュレートできる。これを行うには、次の C++ コードで示すように、ディフューズ ライト マップをベース テクスチャに追加する。

// この例では、lpD3DDev は IDirect3DDevice7 インターフェイスへの
// 有効なポインタであるとする。
// lptexBaseTexture は、テクスチャへの有効なポインタである。
// lptexDiffuseLightMap は、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,lptexDiffuseLightMap );
 
// ブレンディング ステージを設定する。
lpD3DDev->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE );
lpD3DDev->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
lpD3DDev->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT );
[Visual Basic]

テクスチャ ライト マップを使用してディフューズ ライトをシミュレートできる。これを行うには、次の Visual Basic コードで示すように、ディフューズ ライト マップをベース テクスチャに追加する。

' この例では、d3dDev は Direct3DDevice7 オブジェクトへの
' 有効な参照であるとする。
' texBaseTexture は、テクスチャへの有効な参照である。
' texDiffuseLightMap は、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, texDiffuseLightMap)
 
' ブレンディング ステージを設定する。
Call d3dDev.SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE)
Call d3dDev.SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE)
Call d3dDev.SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT)