Platform SDK: DirectX |
光源で照らしたとき、光沢のないサーフェスはディフューズ ライトを放つ。ディフューズ ライトの輝きは、光源からの距離、およびサーフェス法線と光源の方向ベクトルとの角度によって異なる。ライティング計算によってシミュレートするディフューズ ライトのエフェクトは一般的なものである。
テクスチャ ライト マップを使用してディフューズ ライトをシミュレートできる。これを行うには、次の 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 コードで示すように、ディフューズ ライト マップをベース テクスチャに追加する。
' この例では、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)