Partilhar via


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.

Mistura alfa