Freigeben über


Specular Light Maps (Direct3D 9)

Wenn sie von einer Lichtquelle beleuchtet werden, erhalten glänzende Objekte - solche, die stark reflektierende Materialien verwenden - spiegelnde Hervorhebungen. In einigen Fällen sind die vom Beleuchtungsmodul erzeugten Spiegellichter nicht genau. Um ein ansprechenderes Highlight zu erzeugen, wenden viele Direct3D-Anwendungen spiegelförmige Lichtkarten auf Primitive an.

Fügen Sie zum Durchführen einer spiegelförmigen Lichtzuordnung der Textur des Primitiven die spekuläre Lichtkarte hinzu, und modulieren (multiplizieren Sie das Ergebnis mit) der RGB-Lichtkarte.

Das folgende Codebeispiel veranschaulicht diesen Prozess in 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 );

Lichtzuordnung mit Texturen