Partilhar via


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.

Mesclagem Alfa