Buffer de quadros Alpha (Direct3D 9)
A mistura alfa do buffer de quadros é um pouco diferente do alfa de vértice, alfa de material e alfa de textura. Vertex, material e textura alfa definem valores de transparência que são usados apenas para o primitivo atual e, por si só, não têm efeito sobre outros primitivos. A mistura alfa do buffer de quadros controla como a primitiva atual é combinada com os pixels existentes no buffer de quadros para produzir uma cor de pixel final.
Ao executar a mistura 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 é a cor já no local do pixel. A cor de destino é o resultado da renderização de algum outro objeto que está atrás do objeto transparente, ou seja, o objeto que será visível através do objeto transparente. A mistura alfa usa uma fórmula para controlar a proporção entre os objetos de origem e de destino.
Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor
ObjectColor é a contribuição da primitiva que está sendo renderizada no local atual do pixel. 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ão listados 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 | (Anúncio, Anúncio, Anúncio, Anúncio) |
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 mistura de origem e destino para D3DBLEND_SRCALPHA e D3DBLEND_INVSRCALPHA em chamadas separadas. |
D3DBLEND_BOTHINVSRCALPHA | Obsoleto para DirectX 6. Você pode obter o mesmo efeito definindo os fatores de mistura de origem e destino para 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 na configuração D3DRS_BLENDFACTOR. |
O Direct3D usa o estado de renderização D3DRS_ALPHABLENDENABLE para habilitar a combinação de transparência alfa. O tipo de mistura alfa que é feita depende da D3DRS_SRCBLEND e D3DRS_DESTBLEND estados de renderização. Os estados de mistura de origem e destino são usados em pares. O fragmento de código a seguir define o estado de mesclagem de origem como D3DBLEND_SRCCOLOR e o estado de mistura 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 mistura 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 em que parte da cor do objeto de destino parece ser transmitida através do objeto de origem; o resto parece ser absorvido.
Muitos desses fatores de mistura exigem valores alfa na textura para funcionar corretamente. Assim, ao usar vértice ou alfa material, a aplicação é restrita quanto a quais modos produzirão resultados interessantes.
Tópicos relacionados