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.
Kapcsolódó témakörök