ripasso: link
COSA è SUCCESSO PRIMA
trasformazioni in sequenza dallo spazio oggetto allo spazio clip
CARATTERISTICHE
- in genere ogni hardware ha il suo rasterizatore
- per ogni primitiva (nel 2D) individuo i frammenti che la compongono (al suo interno)
- 1 frammento → informazione (unicamente RGB) → 1 pixel
- qs attributo è riassunto nella codifica RGB
- parallelizzabile
- efficente
- poco flessibile: non programmabile dall’utente
ALGORITMO DI RASTERIZZAZIONE TRIANGOLI
- conversione VERTICI da pazio clip a spazio schermo (viewport)
- i vertici nello spazio clip, li converto in frammenti in spazio schermo cartesiano: questo segna il passaggio dalla rappresentazione continua (float) delle coordinate dei vertici a quella discreta (intera) dei frammenti, cioè dalla geometria vettoriale alla rasterizzazione
- in spazio schermo
- il rasterizzatore usa solo le coordinate x ed y (la depth della z viene ignorata)
- le coordinate non sono necessariamente dentro al viewport, ma in ogni caso vengono prodotti frammenti al suo interno
ripasso
- indivisuo i FRAMMENTI del singolo triangolo
- Input: tre punti 2D (le posizioni x,y dei vertici in screen space sono float)
- Output: i frammenti interni al triangolo di coordinate intere
- crea una bounding box che include unicamente la sotto mesh interna al viewport
- rasterizza quello: griglia + selezione frammenti
- Un semipiano è una metà di un piano, divisa da una retta
- attenzione: dato un prodotto vettoriale tra la normale di un piano ed un vettore, il punto sulla punta del vettore è inteso come “davanti” se (mesh definita in senso orario) sta a sinistra del semipiano e “dietro” se sta a destra del semipiano
- se cambio orientamento del triangolo a senso antiorario, cambio la normale (che punta verso l’esterno), quindi ciò che è davanti ora è dietro e viceversa: la formula verifica se il prodotto dot è maggiore di 0 per tutti i 3 piani rispetto al punto
- determina 2 punti a caso sul piano, ne definisce il vettore e lo ruota di 90° per avere il vetttore ortogonale al semipiano (punta verso l’esterno ) della mesh
- prodotto vettoriale in immagine
- in base alla posizione di p definisco se diventerà un frammento
- nel esempio sopra, la rasterizzazione conferisce al frammento: conferisce tutto o nessun attributo, senza far nulla per nascondere alcuna fuoriuscita dalla primitiva
- l’antialiesing (AA) è una serie di tecniche che cerca un compromesso in caso di frammenti parzialemente nella mesh: sfuma il frammento per nascondere il difetto di scalettatura associando semitrasparenza ai bordi delle primitive che le intersecano
tra input e output
definisco i triangoli interni al viewport totalmente o parzialmente
cosa fare se è parzialmente dentro la mesh:
VECCHIA SCUOLA: CLIPPING (taglio) e CULLING (eliminazione) +triangle mesh
diagonal split alla sottomesh formata col clipping
NEW SCHOOL: clipping ebbasta (ottimizzazione hardware) + doppia bounding box
definisco tutti e soli i frammenti totalmente o parzialmente interni al triangolo
PREMESSA
SPIEGAZIONE
casi particolari p.1
casi particolari p.2: ANTIALIESING
- INTPERPOLAZIONE attributi per defininre l’RGB di ogni pixel
- Input ulteriore: un set di attributi per ogni vertice (qualsiasi insieme di vettori, scalari…)
- Output ulteriore: un set di valori interpolati, per ogni frammento prodotto
ATTENZIONE: i frammenti mappano la primitiva che è una trimesh (c’è i frammenti sono più piccoli della trimesh). Le coordinate baricentriche che pesano gli attributi ai vertici li ho, e quindi compongono l’input di queta fase
ACCENNI SULLE ALTRE PRIMITIVE
LINEE