建立混合階段(Direct3D 9)

混合階段是一組紋理作業及其自變數,可定義紋理的混合方式。 製作混合階段時,C++應用程式會叫用 IDirect3DDevice9::SetTextureStageStageState 方法。 第一個呼叫會指定執行的作業。 另外兩個調用會定義套用作業的自變數。 下列程式代碼範例說明如何建立混合階段。

// 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 值的個別作業。 每個作業、色彩和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 );

紋理混合