Udostępnij przez


Mapy światła monochromatycznego (Direct3D 9)

Niektóre starsze tablice akceleratora 3D nie obsługują łączenia tekstur przy użyciu wartości alfa piksela docelowego. Aby uzyskać więcej informacji, zobacz Mieszanie tekstur alfa (Direct3D 9). Te karty zwykle również nie obsługują mieszania wielu tekstur. Jeśli aplikacja jest uruchomiona na karcie, takiej jak ta, może używać łączenia tekstur wieloprzepustowych do wykonywania mapowania światła monochromatycznego.

Aby wykonać mapowanie światła monochromatycznego, aplikacja przechowuje informacje o oświetleniu w danych alfa tekstur mapy światła. Aplikacja używa funkcji filtrowania tekstury Direct3D do wykonywania mapowania z każdego piksela na obrazie pierwotnym do odpowiedniego texela na mapie światła. Ustawia współczynnik mieszania źródła na wartość alfa odpowiedniego texelu.

W poniższym przykładzie pokazano, jak aplikacja może używać tekstury jako mapy światła monochromatycznego:

// This example assumes that d3dDevice is a valid pointer to an
// IDirect3DDevice9 interface and that lptexLightMap is a valid
// pointer to a texture that contains monochrome light map data.

// Set the light map texture as the current texture.
d3dDevice->SetTexture(0, lptexLightMap);

// Set the color operation.
d3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);

// Set argument 1 to the color operation.
d3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1,
                                D3DTA_TEXTURE | D3DTA_ALPHAREPLICATE);

Ponieważ karty wyświetlania, które nie obsługują docelowego mieszania alfa, zwykle nie obsługują mieszania wielu tekstur, w tym przykładzie ustawiono mapę światła jako pierwszą teksturę, która jest dostępna na wszystkich kartach akceleratora 3D. Przykładowy kod ustawia operację koloru dla etapu mieszania tekstury w celu mieszania danych tekstury z istniejącym kolorem pierwotnego. Następnie wybiera pierwszą teksturę i istniejący kolor pierwotnego jako dane wejściowe.

mapowanie światła z teksturami