\\ Home : Articoli : Stampa
Alphablending
Di RobyDx (del 28/01/2007 @ 15:29:06, in DirectX9, linkato 1671 volte)

L’alphablending è una delle tante possibilità offerte da DirectX per la gestione di effetti grafici. L’alphablending altro non è che la gestione degli effetti di trasparenza che un oggetto può mostrare quando ne copre un altro. La gestione di tale effetto è molto semplice e completa e rappresenta una base per ogni gioco. Gli effetti che è possibile realizzare con questa tecnica sono molti e, con una buona dose di abilità, estremamente spettacolari. Esplosioni, scie luminose, e tutto quello che richiede una trasparenza viene fatto comunemente con l’alphablending. Per attivare l’alphablending è sufficiente settare una proprietà del device come true

device.RenderState.AlphaBlendEnable = True

Ora potete sbizzarrirvi con una quantità altissima di opzioni. L’alphablending altro non è che una operazione che viene fatta con un colore sorgente e uno di destinazione. Facciamo un esempio: Disegniamo il primo oggetto. Ogni punto dello schermo ha ora un colore che è appunto il sorgente. Ogni altro punto che viene renderizzato sopra subirà l’operazione di alphablending. Se per esempio settiamo che l’operazione dovrà essere una somma dei due colori allora nei punti in cui gli oggetti si sovrappongono vedremo che i colori si sommano. Le operazioni tra i colori sono le seguenti cinque

device.RenderState.BlendOperation = BlendOperation.Add
device.RenderState.BlendOperation = BlendOperation.Max
device.RenderState.BlendOperation = BlendOperation.Min
device.RenderState.BlendOperation = BlendOperation.RevSubtract
device.RenderState.BlendOperation = BlendOperation.Subtract

I nomi sono abbastanza chiari: nel primo caso il risultato sarà la somma dei colori, nel secondo il massimo, nel terzo il minimo mentre il quarto ed il quinto sono sottrazioni (nella quarta vengono invertiti gli operandi). Il default è add.
Non sono tuttavia questi i valodi da gestire. Sia la sorgente che la destinazione possono restituire dei colori in modo differente da quello che sembrano. Sono proprio queste a determinare la maggior parte degli effetti (di solito viene usato sempre add).
Per settare la sorgente bisogna impostare

device.RenderState.SourceBlend = “valore”

Mentre per la destinazione

device.RenderState.DestinationBlend =”valore”

I valori sono comuni ad entrambi: Ecco la lista

Nome costante Descrizione
Zero Il fattore di Blend è (0, 0, 0, 0).
One Il fattore di Blend è (1, 1, 1, 1).
InvBlendFactor Inverte il colore di blending factor
BlendFactor Usa il colore di blending factor
BothInvSourceAlpha Può essere usata solo nella source dato che sovrascrive anche la destination. Per il source Il fattore di Blend è (1 - As, 1 - As, 1 - As, 1 - As), e per destination (As, As, As, As).
BothSourceAlpha La guida la dà come obsoleta perchè equivale a porre la sorgente come SourceAlpha e la destinazione come InvSourceAlpha
SourceAlphaSat Il fattore di Blend è (f, f, f, 1); f = min(A, 1 - Ad).
InvDestinationColor Il fattore di Blend è (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).
DestinationColor Il fattore di Blend è (Rd, Gd, Bd, Ad).
InvDestinationAlpha Il fattore di Blend è (1 - Ad, 1 - Ad, 1 - Ad, 1 - Ad).
DestinationAlpha Il fattore di Blend è (Ad, Ad, Ad, Ad).
InvSourceAlpha Il fattore di Blend è ( 1 - As, 1 - As, 1 - As, 1 - As).
SourceAlpha Il fattore di Blend è (As, As, As, As).
InvSourceColor Il fattore di Blend è (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).
SourceColor Il fattore di Blend è (Rs,Gs,Bs,As).

Già ora potete settare 5 operazione per 15 valori alla sorgente e 15 alla destinazione lasciando come totale 1125 possibilità (forse un po’ meno dato che qualcuna sovrascrive sia sorce che destination).
Per settare il fattore di blendFactor

device.RenderState.BlendFactor = 'un colore dell'oggetto color

Inoltre impostando un colore trasparente al momento del caricamento delle texture potrete creare dei veri e propri “buchi” nelle texture che faranno trasparire o il materiale o addirittura gli oggetti sottostanti. In questo modo basteranno pochi poligoni con opportune texture per realizzare cose complesse come ad esempio sbarre o griglie (che altrimenti richiederebbero moltissimi poligoni).
Ultimo avviso.
Non tutti i formati sono compatibili con tutte le schede ma questo non darà problemi particolari (semplicemente si vedrà l’oggetto nero). Controllate la compatibilità con le enumerazioni.
Vi lascio all’esempio che permetterà di provare tutte le combinazioni possibili.

Esempio VB.Net

Esempio C#