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


Состояние альфа-наложения (Direct3D 9)

Альфа-значение цвета управляет его прозрачностью. Включение альфа-наложения позволяет смешивать цвета, материалы и текстуры на поверхности с прозрачностью на другой поверхности.

Дополнительные сведения см. в разделах Наложение альфа-текстур (Direct3D 9) и Наложение текстур (Direct3D 9).

Приложения, написанные на C++, используют состояние D3DRS_ALPHABLENDENABLE отрисовки, чтобы включить альфа-смешивание прозрачности. API Direct3D позволяет использовать множество типов альфа-смешивания. Однако важно отметить, что трехмерное оборудование пользователя может не поддерживать все состояния смешивания, разрешенные Direct3D.

Тип альфа-смешивания зависит от состояний отрисовки D3DRS_SRCBLEND И D3DRS_DESTBLEND . Исходное и целевое состояния смешения используются парами. В следующем примере кода показано, как для состояния исходной смеси задано значение D3DBLEND_SRCCOLOR, а для конечного — D3DBLEND_INVSRCCOLOR.

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

// Set the source blend state.
d3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);

// Set the destination blend state.

d3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);

Изменение исходного и целевого состояний смешения может привести к появлению излучаемых объектов в туманной или пыльной атмосфере. Например, если приложение моделирует пламя, поля силы, лучи плазмы или аналогичные излучающие объекты в туманной среде, задайте для исходного и целевого состояний смешения D3DBLEND_ONE.

Другим применением альфа-смешивания является управление освещением в трехмерной сцене, также называемое сопоставлением света. Установка состояния исходного смешения D3DBLEND_ZERO и конечного состояния D3DBLEND_SRCALPHA темнеет сцену в соответствии с исходными альфа-данными. Исходный примитив используется в качестве карты света, которая масштабирует содержимое буфера кадра, чтобы затемнить его при необходимости. Это создает монохромную схему освещения.

Для сопоставления цветового освещения можно задать для исходного альфа-состояния наложения D3DBLEND_ZERO, а для конечного — D3DBLEND_SRCCOLOR.

Состояния отрисовки