Udostępnij przez


Tworzenie etapów mieszania (Direct3D 9)

Etap mieszania to zestaw operacji teksturowych i ich argumentów, które definiują sposób, w jaki tekstury są mieszane. Podczas tworzenia etapu mieszania aplikacje języka C++ wywołują metodę IDirect3DDevice9::SetTextureStageState. Pierwsze wywołanie określa wykonywaną operację. Dwa dodatkowe wywołania definiują argumenty, do których jest stosowana operacja. Poniższy przykład kodu ilustruje tworzenie etapu mieszania.

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

Dane texel w teksturach zawierają wartości koloru i alfa. Aplikacje mogą definiować oddzielne operacje zarówno dla wartości kolorów, jak i alfa w jednym etapie mieszanym. Każda operacja, kolor i alfa mają własne argumenty. Aby uzyskać szczegółowe informacje, zobacz sekcję D3DTEXTURESTAGESTATETYPE.

Mimo że nie jest częścią interfejsu API Direct3D, można wstawić następujące makra do aplikacji, aby skrócić kod wymagany do tworzenia etapów łączenia tekstur.

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

Mieszanie tekstur