Alfa del búfer de fotogramas (Direct3D 9)

La combinación alfa del búfer de fotogramas es un poco diferente que el alfa del vértice, el alfa de material y el alfa de textura. Los valores de transparencia del conjunto alfa de vértices, materiales y texturas que solo se usan para el primitivo actual, y por sí mismos no tienen ningún efecto en otros primitivos. La combinación alfa del búfer de fotogramas controla cómo se combina el primitivo actual con los píxeles existentes en el búfer de fotogramas para producir un color de píxel final.

Al realizar la combinación alfa, se combinan dos colores: un color de origen y un color de destino. El color de origen procede del objeto transparente, el color de destino es el color que ya está en la ubicación del píxel. El color de destino es el resultado de representar algún otro objeto que está detrás del objeto transparente, es decir, el objeto que será visible a través del objeto transparente. La combinación alfa usa una fórmula para controlar la relación entre los objetos de origen y destino.

Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor 

ObjectColor es la contribución de la primitiva que se representa en la ubicación de píxeles actual. PixelColor es la contribución del búfer de fotogramas en la ubicación de píxeles actual.

A continuación se muestra el conjunto de factores de combinación alfa que se pueden usar.

Factor de modo de mezcla Descripción
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 y versiones posteriores. Puede lograr el mismo efecto estableciendo los factores de combinación de origen y destino en D3DBLEND_SRCALPHA y D3DBLEND_INVSRCALPHA en llamadas independientes.
D3DBLEND_BOTHINVSRCALPHA Obsoleto para DirectX 6. Puede lograr el mismo efecto estableciendo los factores de combinación de origen y destino en D3DBLEND_INVSRCALPHA y D3DBLEND_SRCALPHA en llamadas independientes.
D3DBLEND_BLENDFACTOR Use color.r, color.g, color.b y color.a obtenido de la configuración de D3DRS_BLENDFACTOR.
D3DBLEND_INVBLENDFACTOR Use 1-color.r, 1-color.g, 1-color.b y 1 color.a obtenido de la configuración de D3DRS_BLENDFACTOR.

 

Direct3D usa el estado de representación D3DRS_ALPHABLENDENABLE para habilitar la combinación de transparencia alfa. El tipo de combinación alfa que se realiza depende de los estados de representación de D3DRS_SRCBLEND y D3DRS_DESTBLEND. Los estados de combinación de origen y destino se usan en pares. El siguiente fragmento de código establece el estado de combinación de origen en D3DBLEND_SRCCOLOR y el estado de combinación de destino en 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);

Este código realiza una combinación lineal entre el color de origen (el color del primitivo que se representa en la ubicación actual) y el color de destino (el color en la ubicación actual del búfer de fotogramas). La apariencia resultante es similar al vidrio tintado en que parte del color del objeto de destino parece transmitirse a través del objeto de origen; el resto parece ser absorbido.

Muchos de estos factores de mezcla requieren valores alfa en la textura para funcionar correctamente. Por lo tanto, al usar vértices o alfa de material, la aplicación está restringida en cuanto a qué modos generarán resultados interesantes.

Combinación alfa