单色光贴图 (Direct3D 9)

一些较旧的 3D 加速器板不支持使用目标像素的 Alpha 值的纹理混合。 有关详细信息 ,请参阅 Alpha 纹理混合 (Direct3D 9) 。 这些适配器通常也不支持多纹理混合。 如果你的应用程序在此类适配器上运行,它可以使用多通道纹理混合来执行单色光映射。

要执行单色光映射,应用程序可将照明信息存储在其光照图纹理的 Alpha 数据中。 该应用程序使用 Direct3D 的纹理筛选功能来执行从基元图像中每个像素到光照图中相应纹素的映射。 它将源混合因子设为相应纹素的 Alpha 值。

以下示例演示了应用程序如何将纹理用作单色光贴图:

// 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);

由于不支持目标 alpha 混合的显示适配器通常不支持多个纹理混合,因此本示例将光贴图设置为第一个纹理,该纹理在所有 3D 加速键卡上都可用。 示例代码设置纹理混合阶段的颜色操作,以将纹理数据与基元的现有颜色混合。 然后,它会选择第一个纹理和基元的现有颜色作为输入数据。

使用纹理的光映射