Megosztás a következőn keresztül:


Frame Buffer Alpha (Direct3D 9)

A keretpuffer alfa-keverése egy kicsit eltér a csúcspont alfa, az anyag alfa és a textúra alfa. Csúcsok, anyag és anyagminta alfa meg átlátszósági értékek, amelyek csak a jelenlegi primitív, és önmagukban nincs hatással más primitívek. A keretpuffer alfa-keverése azt szabályozza, hogy az aktuális primitív hogyan lesz kombinálva a keretpuffer meglévő képpontjaival a végső képpontszín eléréséhez.

Az alfa-keverés végrehajtásakor két színt egyesít a rendszer: egy forrásszínt és egy célszínt. A forrásszín az átlátszó objektumból származik, a célszín pedig az a szín, amely már a képpont helyén van. A célszín a transzparens objektum mögötti egyéb objektumok, vagyis az áttetsző objektumon keresztül látható objektum renderelésének eredménye. Az alfa-keverés képlet használatával szabályozza a forrás- és célobjektumok közötti arányt.

Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor 

Az ObjectColor az aktuális képponthelyen renderelt primitív elem hozzájárulása. A PixelColor a képkocka pufferének hozzájárulása az aktuális képponthelyen.

A használható alfa-keverési tényezők halmaza az alábbiakban látható.

Keverési mód tényezője Leírás
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 (Hirdetés, Hirdetés, Hirdetés, Hirdetés)
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 Elavult a DirectX 6-os és újabb verzióihoz. Ugyanezt a hatást úgy érheti el, hogy a forrás- és célkeverés tényezőit külön hívásokban D3DBLEND_SRCALPHA és D3DBLEND_INVSRCALPHA állítja be.
D3DBLEND_BOTHINVSRCALPHA A DirectX 6 elavult. Ugyanezt a hatást úgy érheti el, hogy a forrás- és célkeverés tényezőit külön hívásokban D3DBLEND_INVSRCALPHA és D3DBLEND_SRCALPHA állítja be.
D3DBLEND_BLENDFACTOR Használja a color.r, color.g, color.b és color.a értéket a D3DRS_BLENDFACTOR beállításból.
D3DBLEND_INVBLENDFACTOR Használjon 1-color.r, 1-color.g, 1-color.b és 1-color.a értéket a D3DRS_BLENDFACTOR beállításból.

 

A Direct3D a D3DRS_ALPHABLENDENABLE renderelési állapotot használja az alfa áttetszőség keverésének engedélyezéséhez. A végrehajtott alfa-keverés típusa a D3DRS_SRCBLEND és D3DRS_DESTBLEND renderelési állapottól függ. A forrás- és célkeverék-állapotok párokban használatosak. Az alábbi kódrészlet a forráskeverés állapotát D3DBLEND_SRCCOLOR, a célkeverék állapotát pedig D3DBLEND_INVSRCCOLOR állítja be.

// 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);

Ez a kód lineáris keveréket végez a forrásszín (az aktuális helyen renderelt primitív szín) és a célszín (a keretpuffer aktuális helyén lévő szín) között. Az eredményül kapott megjelenés hasonló a színezett üveghez, mert úgy tűnik, hogy a célobjektum egyes színei a forrásobjektumon keresztül kerülnek továbbításra; a többi része úgy tűnik, hogy felszívódik.

Ezen keverési tényezők közül sok megköveteli, hogy a textúra alfaértékei megfelelően működjenek. Így csúcspont vagy anyag alfa használatakor az alkalmazás csak arra korlátozódik, hogy mely módok eredményeznek érdekes eredményeket.

Alpha Blending