Frame Buffer Alpha (Direct3D 9)
Буфер буфера кадра альфа-смешивания немного отличается от вершин альфа-, материал альфа и текстуры альфа-текстуры. Значения прозрачности вершин, материалов и текстуры альфа-набора, которые используются только для текущего примитива, и сами по себе не влияют на другие примитивы. Буфер буфера кадра альфа-смешивания управляет тем, как текущий примитив сочетается с существующими пикселями в буфере кадра, чтобы получить окончательный цвет пикселя.
При выполнении альфа-смешения два цвета объединяются: исходный цвет и целевой цвет. Исходный цвет от прозрачного объекта, целевой цвет уже находится в расположении пикселя. Цвет назначения является результатом отрисовки другого объекта, который находится за прозрачным объектом, то есть объект, который будет отображаться через прозрачный объект. Альфа-смесь использует формулу для управления соотношением между исходными и целевыми объектами.
Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor
ObjectColor — это вклад от примитива, отрисовываемого в текущем расположении пикселя. PixelColor — это вклад из буфера кадра в текущем расположении пикселя.
Ниже приведен набор факторов альфа-смешения, которые можно использовать.
Фактор режима смешивания | Описание |
---|---|
D3DBLEND_ZERO | (0, 0, 0, 0) |
D3DBLEND_ONE | (1, 1, 1, 1) |
D3DBLEND_SRCCOLOR | (Rs, Gs, Bs, As) |
D3DBLEND_INVSRCCOLOR | (1-rs, 1-Gs, 1-Bs, 1-As) |
D3DBLEND_SRCALPHA | (As, As, As, As) |
D3DBLEND_INVSRCALPHA | (1-As, 1-As, 1-As, 1-As) |
D3DBLEND_DESTALPHA | (Ad, Ad, Ad, Ad, Ad) |
D3DBLEND_INVDESTALPHA | (1-Ad, 1-Ad, 1-Ad, 1-Ad) |
D3DBLEND_DESTCOLOR | (Rd, Gd, Bd, Ad) |
D3DBLEND_INVDESTCOLOR | (1-Rd, 1-Gd, 1-Bd, 1-Ad) |
D3DBLEND_SRCALPHASAT | (f, f, f, 1); f = min(As, 1-Ad) |
D3DBLEND_BOTHSRCALPHA | Устарело для DirectX 6 и более поздних версий. Вы можете добиться того же эффекта, задав факторы смешения источника и назначения для D3DBLEND_SRCALPHA и D3DBLEND_INVSRCALPHA в отдельных вызовах. |
D3DBLEND_BOTHINVSRCALPHA | Устарело для DirectX 6. Вы можете добиться того же эффекта, задав факторы смешения источника и назначения для D3DBLEND_INVSRCALPHA и D3DBLEND_SRCALPHA в отдельных вызовах. |
D3DBLEND_BLENDFACTOR | Используйте color.r, color.g, color.b и color.a, полученный из параметра D3DRS_BLENDFACTOR. |
D3DBLEND_INVBLENDFACTOR | Используйте 1-color.r, 1-color.g, 1-color.b и 1-color.a, полученный из параметра D3DRS_BLENDFACTOR. |
Direct3D использует состояние D3DRS_ALPHABLENDENABLE отрисовки для включения смешивания альфа-прозрачности. Тип альфа-смешивания, который выполняется, зависит от состояния D3DRS_SRCBLEND и D3DRS_DESTBLEND отрисовки. Исходные и целевые состояния смешения используются в парах. Следующий фрагмент кода задает исходное состояние смешивания для D3DBLEND_SRCCOLOR и конечного состояния смешивания D3DBLEND_INVSRCCOLOR.
// This code fragment assumes that lpD3DDevice is a
// valid pointer to a device.
// Enable alpha blending.
lpD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,
TRUE);
// Set the source blend state.
lpD3DDevice->SetRenderState(D3DRS_SRCBLEND,
D3DBLEND_SRCCOLOR);
// Set the destination blend state.
lpD3DDevice->SetRenderState(D3DRS_DESTBLEND,
D3DBLEND_INVSRCCOLOR);
Этот код выполняет линейную смесь между исходным цветом (цветом отрисовываемого примитивом в текущем расположении) и целевым цветом (цветом в текущем расположении в буфере кадра). Результирующий внешний вид похож на оттененное стекло в том, что некоторый цвет целевого объекта, кажется, передается через исходный объект; Остальная часть, как представляется, поглощается.
Многие из этих факторов смешивания требуют правильной работы альфа-значений в текстуре. Таким образом, при использовании вершины или материала альфа приложение ограничено тем, какие режимы будут производить интересные результаты.
Связанные разделы