Поделиться через


Создание этапов смешивания (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);

Данные текселя в текстурах содержат значения цвета и альфа. Приложения могут определять отдельные операции для значений цвета и альфа на одном этапе смешения. Каждая операция, цвет и альфа-канал имеют свои собственные аргументы. Дополнительные сведения см. в разделе D3DTEXTURESTAGESTATETYPE.

Хотя это и не является частью API Direct3D, в приложение можно вставить следующие макросы, чтобы сократить код, необходимый для создания этапов наложения текстур.

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

Наложение текстур