10.3. Scorrimento linea di separazione

5
Il tuo voto: Nessuno Media: 5 (1 vote)

L'effetto presenta l'animazione di una linea verticale immaginaria che, spostandosi sa sinistra verso destra, render visibile all'utente l'immagine destinazione; caratteristica particolare è che le due immagini non subiscono uno scorrimento.

  1 // Sampler dell'immagine sorgente
  2 sampler2D sourceSampler;
  3 sampler2D destSampler;
  4 
  5 // Inverso della dimensione del viewport
  6 uniform float2 invViewSize;
  7 
  8 // Posizione della transizione 0.0 ... 1.0
  9 uniform float transition;
 10 
 11 float4 ps_main(float2 TexCoords : TEXCOORD0) : COLOR0
 12 {
 13     // Recupero le informazioni dai render-targets per il pixel corrente
 14     float4 srcColor = tex2D(sourceSampler, TexCoords);
 15     float4 destColor = tex2D(destSampler, TexCoords);
 16 
 17     // Le coordinate di texture vanno da 0.0 a 1.0 quindi possiamo
 18     // determinare quale texture renderizzare confrontandole con
 19     // la posizione della transizione che ha lo stesso range.
 20     if (TexCoords.x >= transition)
 21         return srcColor;
 22     else
 23         return destColor;
 24 }

Come visibile dal codice l'effetto è ottenuto tramite il blocco condizionale (linee 20...23) che, in base al valore della variabile transition e alle coordinate di texture del pixel corrente, seleziona l'immagine sorgente o destinazione. Il confronto tra la variabile e le coordinate di texture è coerente perchè entrambi hanno range 0.0 ... 1.0.

È interessante notare che, modificando semplicemente la componente delle coordinate di texture che viene coinvolta nel confronto, è possibile realizzare sia una linea verticale che una orizzontale. Utilizzando 1.0-transition come termine di confronto, è possibile invertire la direzione di movimento.