Platform SDK: DirectX |
光源で照らしたとき、"光を発する" オブジェクト (反射性の高いマテリアルを使用するオブジェクト) はスペキュラ ハイライトを受け取る。ライティング モジュールで生成されたスペキュラ ハイライトは正確でない場合がある。より効果的なハイライトを生成するために、多くの Direct3D アプリケーションではプリミティブにスペキュラ ライト マップを適用する。
スペキュラ ライト マッピングを実行するには、まずスペキュラ ライト マップをプリミティブの既存のテクスチャに合わせて調節する。次に、モノクロまたは RGB ライト マップを追加する。
次のコードは、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 コードは、この処理を示す。
' この例では、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)