Buffer de quadro Alfa (Direct3D 9)
A mesclagem alfa do buffer de quadros é um pouco diferente do vértice alfa, alfa material e textura alfa. Valores de transparência de conjunto alfa de vértice, material e textura que são usados apenas para o primitivo atual e por si só não têm efeito sobre outros primitivos. A combinação alfa do buffer de quadros controla como o primitivo atual é combinado com pixels existentes no buffer de quadros para produzir uma cor de pixel final.
Ao executar a mesclagem alfa, duas cores estão sendo combinadas: uma cor de origem e uma cor de destino. A cor de origem é do objeto transparente, a cor de destino já é a cor no local do pixel. A cor de destino é o resultado da renderização de algum outro objeto que está por trás do objeto transparente, ou seja, o objeto que ficará visível por meio do objeto transparente. A mesclagem alfa usa uma fórmula para controlar a taxa entre os objetos de origem e de destino.
Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor
ObjectColor é a contribuição do primitivo que está sendo renderizado no local de pixel atual. PixelColor é a contribuição do buffer de quadros no local atual do pixel.
O conjunto de fatores de mistura alfa que podem ser usados está listado abaixo.
Fator de modo de mesclagem | Descrição |
---|---|
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) |
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 | Obsoleto para DirectX 6 e posterior. Você pode obter o mesmo efeito definindo os fatores de combinação de origem e destino como D3DBLEND_SRCALPHA e D3DBLEND_INVSRCALPHA em chamadas separadas. |
D3DBLEND_BOTHINVSRCALPHA | Obsoleto para DirectX 6. Você pode obter o mesmo efeito definindo os fatores de combinação de origem e destino como D3DBLEND_INVSRCALPHA e D3DBLEND_SRCALPHA em chamadas separadas. |
D3DBLEND_BLENDFACTOR | Use color.r, color.g, color.b e color.a obtidos na configuração D3DRS_BLENDFACTOR. |
D3DBLEND_INVBLENDFACTOR | Use 1-color.r, 1-color.g, 1-color.b e 1-color.a obtidos da configuração D3DRS_BLENDFACTOR. |
O Direct3D usa o estado de renderização D3DRS_ALPHABLENDENABLE para habilitar a mesclagem de transparência alfa. O tipo de mesclagem alfa que é feito depende dos estados de renderização D3DRS_SRCBLEND e D3DRS_DESTBLEND. Os estados de combinação de origem e destino são usados em pares. O fragmento de código a seguir define o estado de combinação de origem como D3DBLEND_SRCCOLOR e o estado de combinação de destino como 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);
Esse código executa uma combinação linear entre a cor de origem (a cor da primitiva que está sendo renderizada no local atual) e a cor de destino (a cor no local atual no buffer de quadros). A aparência resultante é semelhante ao vidro colorido, na medida em que parte da cor do objeto de destino parece ser transmitida pelo objeto de origem; o resto parece ser absorvido.
Muitos desses fatores de mesclagem exigem valores alfa na textura para operar corretamente. Portanto, ao usar vértice ou alfa material, o aplicativo é restrito quanto a quais modos produzirão resultados interessantes.
Tópicos relacionados