(Direct3D 9) 创建混合阶段

混合阶段是一组纹理操作及其定义纹理混合方式的参数。 创建混合阶段时,C++ 应用程序调用 IDirect3DDevice9::SetTextureStageState 方法。 第一个调用指定执行的操作。 另外两个调用定义将操作应用到的参数。 下面的代码示例演示如何创建混合阶段。

// This example assumes that lpD3DDev is a valid pointer to an
// IDirect3DDevice9 interface.

// Set the operation for the first texture.
d3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_ADD);

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

// Set argument 2 to the iterated diffuse color.
d3dDevice->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);

纹理中的纹素数据包含颜色和 alpha 值。 应用程序可以在单个混合阶段中为颜色值和 alpha 值定义单独的操作。 每个操作、color 和 alpha 都有其自己的参数。 有关详细信息,请参阅 D3DTEXTURESTAGESTATETYPE

虽然不是 Direct3D API 的一部分,但你可以在应用程序中插入以下宏,以缩写创建纹理混合阶段所需的代码。

#define SetTextureColorStage( dev, i, arg1, op, arg2 )     \
    dev->SetTextureStageState( i, D3DTSS_COLOROP, op);      \
    dev->SetTextureStageState( i, D3DTSS_COLORARG1, arg1 ); \
    dev->SetTextureStageState( i, D3DTSS_COLORARG2, arg2 );

#define SetTextureAlphaStage( dev, i, arg1, op, arg2 )     \
    dev->SetTextureStageState( i, D3DTSS_ALPHAOP, op);      \
    dev->SetTextureStageState( i, D3DTSS_ALPHAARG1, arg1 );  \
    dev->SetTextureStageState( i  D3DTSS_ALPHAARG2, arg2 );

纹理混合