Partager via


Mémoire tampon d’image Alpha (Direct3D 9)

Le mélange alpha de la mémoire tampon de trame est un peu différent de l’alpha de vertex, de l’alpha de matériau et de la texture alpha. Les valeurs de transparence du jeu alpha de vertex, de matériau et de texture sont utilisées uniquement pour la primitive actuelle et n’ont par elles-mêmes aucun effet sur d’autres primitives. L’alpha-fusion de la mémoire tampon de trame contrôle la façon dont la primitive actuelle est combinée avec les pixels existants dans la mémoire tampon d’image pour obtenir une couleur de pixel finale.

Lors de la fusion alpha, deux couleurs sont combinées : une couleur source et une couleur de destination. La couleur source provient de l’objet transparent, la couleur de destination est la couleur déjà à l’emplacement du pixel. La couleur de destination est le résultat du rendu d’un autre objet qui se trouve derrière l’objet transparent, c’est-à-dire l’objet qui sera visible via l’objet transparent. Le mélange alpha utilise une formule pour contrôler le rapport entre les objets source et destination.

Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor 

ObjectColor est la contribution de la primitive rendue à l’emplacement de pixels actuel. PixelColor est la contribution de la mémoire tampon d’image à l’emplacement actuel du pixel.

L’ensemble des facteurs de fusion alpha qui peuvent être utilisés est répertorié ci-dessous.

Facteur de mode de fusion Description
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 Obsolète pour DirectX 6 et versions ultérieures. Vous pouvez obtenir le même effet en définissant les facteurs de fusion source et de destination sur D3DBLEND_SRCALPHA et D3DBLEND_INVSRCALPHA dans des appels distincts.
D3DBLEND_BOTHINVSRCALPHA Obsolète pour DirectX 6. Vous pouvez obtenir le même effet en définissant les facteurs de fusion source et de destination sur D3DBLEND_INVSRCALPHA et D3DBLEND_SRCALPHA dans des appels distincts.
D3DBLEND_BLENDFACTOR Utilisez color.r, color.g, color.b et color.a obtenus à partir du paramètre D3DRS_BLENDFACTOR.
D3DBLEND_INVBLENDFACTOR Utilisez 1-color.r, 1-color.g, 1-color.b et 1-color.a obtenus à partir du paramètre D3DRS_BLENDFACTOR.

 

Direct3D utilise l’état de rendu D3DRS_ALPHABLENDENABLE pour activer le mélange de transparence alpha. Le type de fusion alpha qui est effectué dépend des états de rendu D3DRS_SRCBLEND et D3DRS_DESTBLEND. Les états de fusion source et de destination sont utilisés dans des paires. Le fragment de code suivant définit l’état de fusion source sur D3DBLEND_SRCCOLOR et l’état de fusion de destination sur 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);

Ce code effectue un mélange linéaire entre la couleur source (la couleur de la primitive affichée à l’emplacement actuel) et la couleur de destination (la couleur à l’emplacement actuel dans la mémoire tampon du cadre). L’apparence résultante est similaire au verre teinté en ce qu’une partie de la couleur de l’objet de destination semble être transmise par l’objet source; le reste semble être absorbé.

La plupart de ces facteurs de mélange nécessitent des valeurs alpha dans la texture pour fonctionner correctement. Ainsi, lors de l’utilisation d’un vertex ou d’un matériau alpha, l’application est limitée quant aux modes qui produiront des résultats intéressants.

Fusion alpha