Partager via


Cartes de lumière spéculaire (Direct3D 9)

Lorsqu’ils sont éclairés par une source de lumière, des objets brillants - ceux qui utilisent des matériaux hautement réfléchissants - reçoivent des surbrillances spéculaires. Dans certains cas, les surbrillances spéculaires produites par le module d’éclairage ne sont pas précises. Pour produire une mise en surbrillance plus attrayante, de nombreuses applications Direct3D appliquent des cartes de lumière spéculaire aux primitives.

Pour effectuer un mappage de lumière spéculaire, ajoutez la carte de lumière spéculaire à la texture de la primitive, puis modulez (multipliez le résultat par) la carte de lumière RVB.

L’exemple de code suivant illustre ce processus en C++.

// This example assumes that d3dDevice is a valid pointer to an
// IDirect3DDevice9 interface.
// lptexBaseTexture is a valid pointer to a texture.
// lptexSpecLightMap is a valid pointer to a texture that contains RGB
// specular light map data.
// lptexLightMap is a valid pointer to a texture that contains RGB
// light map data.

// Set the base texture.
d3dDevice->SetTexture(0, lptexBaseTexture );

// Set the base texture operation and arguments.
d3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE );
d3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
d3dDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );

// Set the specular light map.
d3dDevice->SetTexture(1, lptexSpecLightMap);

// Set the specular light map operation and args.
d3dDevice->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_ADD );
d3dDevice->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
d3dDevice->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT );

// Set the RGB light map.
d3dDevice->SetTexture(2, lptexLightMap);

// Set the RGB light map operation and arguments.
d3dDevice->SetTextureStageState(2,D3DTSS_COLOROP, D3DTOP_MODULATE);
d3dDevice->SetTextureStageState(2,D3DTSS_COLORARG1, D3DTA_TEXTURE );
d3dDevice->SetTextureStageState(2,D3DTSS_COLORARG2, D3DTA_CURRENT );

mappage clair avec des textures