Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 21 di 53
  • livello principiante
Indice lezioni

Additive Blending

Modificare la modalità miscelazione delle figure sovrapposte
Modificare la modalità miscelazione delle figure sovrapposte
Link copiato negli appunti

Consideriamo la seguente texture che rappresenta un campo di stelle:

Figura 33. Sfondo con stelle
Stelle

Le stelle sono rappresentate in bianco rgb=(1,1,1) mentre il fondale è rappresentato in nero rgb=(0,0,0). Questa particolare texture non ha un canale di alpha associato, ossia è del tutto opaca.

Ipotizziamo, come spesso accade, di non voler utilizzare la parte nera della texture, trattandola come se fosse trasparente. Per fare questo possiamo istruire lo SpriteBatch affinché ad ogni operazione di disegno usi la quantità di colore di ciascun pixel disegnato e la sommi alla quantità di colore presente in quel punto sullo schermo. In questo modo i pixel neri risulteranno del tutto trasparenti, i pixel bianchi del tutto opachi e quelli grigi semi-trasparenti.

Per attivare questa modalità di disegno dobbiamo usare specificare la modalità di blending, ossia di mescolio tra l'immagine precedentemente disegnata su schermo ed i nuovi pixel:

sprite_batch.Begin(SpriteSortMode.Deferred, BlendState.Additive, SamplerState.LinearWrap, null, null);

abbiamo delle altre possibilità per quanto riguarda il blending, in particolare:

Modalità di blending Descrizione
BlendState.Additive somma il nuovo disegno a quello corrente
BlendState.AlphaBlend usa il canale di alpha del nuovo disegno come peso della somma pesata tra vecchio e nuovo
BlendState.NonPremultiplied usa il canale di alpha del nuovo disegno come peso della somma pesata tra vecchio e nuovo, moltiplicando ulteriormente il colore del nuovo disegno per il suo canale di alpha
BlendState.Opaque non mescola il nuovo disegno, trattandolo come se fosse completamente opaco

A questo punto possiamo disegnare la texture stars varie volte, con dei source rectangle diversi per evitare che le stelle si sovrappongano, e con colori diversi:

sprite_batch.Draw(stars, new Rectangle(0, 0, 800, 480), new Rectangle(0, 0, 400, 200), Color.OrangeRed);
sprite_batch.Draw(stars, new Rectangle(0, 0, 800, 480), new Rectangle(0, 0, 800, 400), Color.Green);
sprite_batch.Draw(stars, new Rectangle(0, 0, 800, 480), new Rectangle(0, 0, 1600, 400), Color.White);

Il risultato, come desiderato, è:

Figura 34. Layer aggiunti con blending additivo
Appaiono i layer con blending additivo

in cui i tre layers di stelle (arancione, verde e bianco) sono tutti e tre visibili; senza il blending additivo, il risultato sarebbe stato:

Figura 35. Un layer opaco copre gli altri
Layer senza blending

Il terzo strato di stelle avrebbe nascosto i precedenti in quanto non trasparente.

Ti consigliamo anche