Compartir a través de


Crear fases de fusión (Direct3D 9)

Una fase de fusión es un conjunto de operaciones de textura y sus argumentos que definen cómo se combinan las texturas. Al realizar una fase de fusión, las aplicaciones de C++ invocan el método IDirect3DDevice9::SetTextureStageState . La primera llamada especifica la operación que se realiza. Dos invocaciones adicionales definen los argumentos a los que se aplica la operación. En el ejemplo de código siguiente se muestra la creación de una fase de fusión.

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

Los datos de elementos de textura en texturas contienen valores alfa y de color. Las aplicaciones pueden definir operaciones independientes para los valores de color y alfa en una sola fase de fusión. Cada operación, color y alfa tiene sus propios argumentos. Para obtener más información, consulte D3DTEXTURESTAGESTATETYPE.

Aunque no forma parte de la API de Direct3D, puede insertar las macros siguientes en la aplicación para abreviar el código necesario para crear fases de combinación de texturas.

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

Fusión de texturas