Partager via


Frame Buffer Alpha (Direct3D 9)

Le mélange alpha de mémoire tampon de trame est un peu différent du vertex alpha, du matériau alpha et de la texture alpha. Vertex, matériau et texture alpha définissent des valeurs de transparence qui sont utilisées uniquement pour la primitive actuelle, et par eux-mêmes n’ont aucun effet sur d’autres primitives. Le mélange alpha de 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’images pour produire une couleur de pixel finale.

Lorsque vous effectuez un mélange 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 déjà à l’emplacement du pixel. La couleur de destination est le résultat du rendu d’un autre objet derrière l’objet transparent, c’est-à-dire l’objet qui sera visible par le biais de l’objet transparent. La fusion alpha utilise une formule pour contrôler le rapport entre les objets source et de destination.

Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor 

ObjectColor est la contribution de la primitive affichée à l’emplacement de pixel actuel. PixelColor est la contribution de la mémoire tampon de trame à l’emplacement actuel du pixel.

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

Facteur de mode blend 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 (Annonce, Publicité, Publicité, Publicité)
D3DBLEND_INVDESTALPHA (1-Ad, 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 obtenu à partir du paramètre D3DRS_BLENDFACTOR.
D3DBLEND_INVBLENDFACTOR Utilisez 1-color.r, 1-color.g, 1-color.b et 1-color.a obtenu à 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 en 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 (couleur à l’emplacement actuel dans la mémoire tampon du cadre). L’apparence résultante est similaire au verre teinté dans lequel 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 fusion nécessitent que les valeurs alpha de la texture fonctionnent correctement. Ainsi, lors de l’utilisation de vertex ou de matériaux alpha, l’application est limitée quant aux modes qui produisent des résultats intéressants.

de fusion alpha