Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.

Slides:



Advertisements
Presentazioni simili
Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Advertisements

Laboratorio di Linguaggi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica.
Le operazioni di moltiplicazione e divisione in Aritmetica e geometria
Grafica Raster La grafica in 2D con coordinate intere viene detta grafica raster. In questa parte tratteremo le operazioni fondamentali per disegnare su.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Recap sul C Marco D. Santambrogio – Ver. aggiornata al 11 Aprile 2013.
SPLINE disegno di linee e superfici
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione IV: tipi definiti dallutente Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 prove.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 prove generali.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Laboratorio di Linguaggi lezione III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 1/40 Esercizio Rasterizzazione (risultato.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VIII B: Puntatori e Pasticci Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IX: Dentro le Librerie Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Computer Graphics Marco Tarini Lezione 7: rasterizzazione la fabbrica dei frammenti Università dellInsubria Facoltà di Scienze MFN - Varese Corso di Laurea.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Laboratorio di Linguaggi lezione III: tipi base, espressioni, type-cast Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione IX: tipi ricorsivi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Costruzione di Interfacce Lezione 8 Rasterizzazione
Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2007/08.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Problemi e algoritmi Anno Accademico 2009/2010.
Seminario su clustering dei dati – Parte II
Algoritmi su Tipi Semplici
l' algoritmo di Bresenham
14 giugno 2011 Rasterizzazione Prof. Roberto Pirrone.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
Prof. Cerulli – Dott.ssa Gentili
Programmazione grafica 1
Complessità degli algoritmi (cenni) CORDA – Informatica A. Ferrari.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Sistemi Multimediali II Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Rasterizzazione Antonio Cisternino
Metodo di Cramer Dato il sistema lineare a due incognite per risolvere il sistema dobbiamo costruire 3 matrici. È detta matrice un qualsiasi gruppo di.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Corso di Laurea Triennale in Relazioni Economiche Internazionali Facoltà di Scienze Politiche, Sociologia, Comunicazione Prova Finale di Laurea Triennale.
Transcript della presentazione:

Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione 7: rasterizzazione la fabbrica dei frammenti

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 2/40 Rasterizziamo! frammenti (candidati pixels) Vertici (punti in R 3 ) pixel finali (nello screen-buffer) Vertici proiettati (punti in R 2 ) Z rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice rasterizer triangoli rasterizer segmenti rasterizer punti rasterizer triangoli rasterizer punti

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 3/40 Rasterizzazione Segmenti Produrre i frammenti il più vicino possibile alla linea ideale v0v0 v1v1 lavoriamo con coord intere. Arrotondarle prima. Attenzione agli estremi! Pensare al Line LOOP

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 4/40 Rasterizzazione di segmenti Vogliamo avere la sequenza di frammenti che –approssimi al meglio il segmento e quindi –sia il più in linea retta possibile

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 5/40 Rasterizzazione di segmenti coefficienti angolari m 1 1 frammento per colonna dx=9 dy=7 Considerando approx di segmenti di circa un pixel di spessore

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 6/40 Rasterizzazione di segmenti dx=3 dy=10 coefficienti angolari m >1 1 frammento per riga Consideriamo i due casi separatemente. Ne vediamo uno. (l'altro è simile)

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 7/40 Scrivo la retta come: Rasterizzazione di segmenti: algoritmo analitico dx=9 dy=7 m=dy/dx=7/9

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 8/40 Rasterizziamo da (x 0,y 0 ) a (x 1,y 1 ) Rasterizzazione di segmenti: algoritmo analitico P0P0 P1P1

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 9/40 Algoritmo analitico Per x che va da x 0 a x 1 x ++ y mx + B arrotondare y produrre frammento ( x, y )

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 10/40 Algoritmo analitico seleziona sempre il frammento più vicino alla linea ideale per trovarlo si devono fare: –unaddizione (un +1 intero) –una moltiplicazione (float) –un arrotondamento (da float a int)

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 11/40 Prima ottimizzazione: algoritmo DDA DDA = Digital Differential Analyzer Elimina la moltiplicazione Tecnica incrementale –calcola la nuova y in base alla precedente

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 12/40 Prima ottimizzazione: algoritmo DDA Banalmente:

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 13/40 Prima ottimizzazione: algoritmo DDA per x che va da x 0 a x 1 x ++ y mx + B arrotondare y produrre frammento ( x, y ) y y 0 per x che va da x 0 a x 1 x ++ y +=m arrotondare y produrre frammento ( x, y ) algo analiticoalgo DDA operazioni float

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 14/40 Algoritmo di Bresenham Idea: usare solo interi Dato l'ultimo punto, quali scelte per il prossimo? (con 0 < m < 1)

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 15/40 Algoritmo di Bresenham 0m<1 otto casi!

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 16/40 Algoritmo di Bresenham Due sole! –o Est –o Nord-Est

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 17/40 Algoritmo di Bresenham Q intersezione linea con la prossima colonna

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 18/40 Algoritmo di Bresenham Q intersezione linea con la prossima colonna M il punto di mezzo del segmento E-NE Basta vedere da che parte sta M

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 19/40 Algoritmo di Bresenham Conviene passare alla forma implicita dellequazione della retta:

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 20/40 Algoritmo di Bresenham La funzione F: –vale 0 per tutti i punti della retta –assume valori positivi sotto la retta –assume valori negativi sopra la retta

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 21/40 Algoritmo di Bresenham Per scegliere fra NE e E, basta vedere il segno di

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 22/40 Algoritmo di Bresenham variabile di decisione d d = F(M), Quindi

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 23/40 Algoritmo di Bresenham d 0 M sta sopra la retta Scegliamo E

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 24/40 Algoritmo di Bresenham d 0 M sta sotto la retta Scegliamo NE

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 25/40 Algoritmo di Bresenham d 0 M sta sulla retta (Q M) Scegliamo uno qualsiasi dei due

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 26/40 Algoritmo di Bresenham Idea finale! Anche d può essere calcolato incrementalmente! –(come la y nell'algoritmo incrementale) ?

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 27/40 Se ho scelto E Algoritmo di Bresenham Torna:

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 28/40 Algoritmo di Bresenham Se ho scelto NE Torna:

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 29/40 Algoritmo di Bresenham Ok, d viene incrementato di una costante (diversa a seconda se E o NE) E il valore iniziale? (x 0, y 0 ) appartiene alla retta e F(x 0, y 0 ) 0

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 30/40 Algoritmo di Bresenham MidpointLine(int x0, int y0, int x1, int y1) { int dx, dy, incrE, incrNE, d, x, y; while (x < x1 ) { if ( d <= 0 ) { d = d+incrE; x++; } else { d = d+incrNE; x++; y++; } SparaFrammento(x, y); } Variabili intere Scelta di E Inizializzazione dy = y1-y0; dx = x1-x0; d = 2*dy-dx; incrE = 2*dy; incrNE = 2*(dy-dx); x = x0; y = y0; Scelta di NE Moltiplico per 2 per avere solo interi

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 31/40 Rasterizziamo! frammenti (candidati pixels) Vertici (punti in R 3 ) pixel finali (nello screen-buffer) Vertici proiettati (punti in R 2 ) Z rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice inizzializzazione ciclo (parallelizzato)

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 32/40 Segmenti di Spessore diverso da uno es: spessore 3

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 33/40 Segmenti di Spessore diverso da uno Chiaramente è solo una approssimazione

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 34/40 Segmenti di Spessore diverso da uno void glLineWidth( width ); Non necessariamente un intero (se si usa anti-aliasing, vedi poi) In OpenGL

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 35/40 Rasterizziamo! frammenti (candidati pixels) Vertici (punti in R 3 ) pixel finali (nello screen-buffer) Vertici proiettati (punti in R 2 ) Z rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 36/40 Rasterizziamo triangoli Algoritmo scan-line Idea Base: 1.ordiniamo per y 2.per ogni righa da y min a y max 1.trova primo framm dentro 2.trova primo framm fuori 3.produci frammenti da da A incluso a B escluso

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 37/40 Rasterizziamo triangoli Algoritmo scan-line Idea Base: 1.ordiniamo per y 2.per ogni righa da y min a y max 1.trova primo framm dentro 2.trova primo framm fuori 3.produci frammenti da primo dentro a primo fuori (escluso)

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 38/40 Bresenham In ogni riga: –trovare il primo-dentro e primo-fuori è simile a Bresenham, ma: un caso solo (sempre per riga, sempre verso l'alto) arrotondiamo sempre per eccesso passiamo all'altro segmento quando siamo arrivati alla riga del punto in mezzo

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 39/40 "Scan-Conversion" = Rasterization (Rasterizzazione) "to scan-conver" = to Rasterize "Span" = intervallo da primo-dentro a primo-fuori "Line-scan" = una riga processata "Active edges" = i 2 lati attuali "Edge tables" = i 3 lati (precalcolati) Terminologie circa la rasterizzazione triangoli 3 2 Nel nostro caso (triangoli)! In generale, N e N (poligoni generici)

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 40/40 Problemi con rasterizzazione di poligoni usando scan-line I frammenti vengono prodotti uno alla volta Non adatto ad una implementazione parallela –il rasterizzatore deve produrre frammenti molto velocemente (cioè molti alla volta) se non vogliamo tenere disoccupato il processore di frammenti

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 41/40 Soluzione Produrre frammenti a gruppi –ad es, a gruppi di 2x2 o 4x4 o 4x1 o 8x1... Non necessariamente tutti i componenti di un gruppo sono frammenti interni al triangolo Testare ogni frammento: –scartare quelli interni

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 42/40 Test di appartenenza ad un triangolo Test di appartenenza ad un semipiano: SI NO p n x con TEST: retta definita da punto appartenente p e vettore ortognoale n

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 43/40 SI NO Test di appartenenza ad un triangolo Il semipiano e' definito da un lato: v 0 =(x 0, y 0 ) n v 1= (x 1, y 1 ) q funzione detta EDGE FUNCTION ("Edge" = "Lato") n = ( - ( y 1 -y 0 ), x 1 -x 0 ) p = (y 0, x 0 ) f(q) = nq - np

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 44/40 Test di appartenenza ad un triangolo Triangolo=interesezione di 3 semipiani v0v0 v2v2 v1v1 SI NO SI NO SI NO SI NO SI NO SI NO SI

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 45/40 Test di appartenenza ad un triangolo Triangolo=interesezione di 3 semipiani NO v0v0 SI NO SI NO v1v1 v2v2 SI NO SI NO SI NO SI Triangoli front-facing (senso anti-orario)

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 46/40 Test di appartenenza ad un triangolo Scambio v 1 con v 2 v2v2 v1v1 v0v0 Triangoli BACK-facing (senso anti-orario) SI NO SI NO SI NO SI NO SI NO SI NO

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 47/40 Test di appartenenza ad un triangolo Tre Edge Functions: (una per lato) Tutte SI (negative) : –frammento interno a triangolo front-facing Tutte NO (positive): –frammento interno a triangolo back-facing Miste: –frammento esterno (scartare sempre)

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 48/40 Esempio, basandosi sul bounding box 1.Trovo il bounding box del triangolo Come si trova il bounding box di un triangolo?

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 49/40 Esempio, basandosi sul bounding box 1.Trovo il bounding box del triangolo

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 50/40 Esempio, basandosi sul bounding box 1.Trovo il bounding box del triangolo 2.Processo ogni blocco (es. 2x2) 1.Testo ogni frammento nel blocco 2.Se interno al triangolo lo mando giù nel pipemlie

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 51/40 Rasterizziamo! frammenti (candidati pixels) Vertici (punti in R 3 ) pixel finali (nello screen-buffer) Vertici proiettati (punti in R 2 ) Z rasterizer triangoli computazioni per frammento set- up rasterizer segmenti set- up rasterizer punti set- up computazioni per vertice SETUP: trovo bounding box testo gruppi di frammenti (parallelizzato)

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 52/40 Clipping Clipping! Tutto fuori: CULLED ! no prob. Screen Tutto dentro: Rasterizzo ! (benissimo) Qualche vertice fuori, ma non tutto il triangolo Clipping. HAI!

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 53/40 Clipping: la vecchia scuola Clipping! Screen 1. Trovo intersezioni 2. Unisco intersezioni A B 3. Divido poligono in triangoli 4. Rasterizzo ogni triangolo A poi B

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 54/40 Clipping: la vecchia scuola Clipping! Screen 1. Trovo intersezioni 2. Unisco intersezioni 3. Divido poligono in triangoli 4. Rasterizzo ogni triangolo B C A

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 55/40 Clipping: la vecchia scuola Clipping! Screen 2. Unisco intersezioni 3. Divido poligono in triangoli 4. Rasterizzo ogni triangolo B C A D 1. Trovo intersezioni Caso pessimo molto complicato Malissimo per implementazione HW L'HW deve prevedere il caso pessimo, anche se è raro

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 56/40 Clipping: come si fa ora Clipping! Screen 1. Trovo bounding box 3. Rasterizzo nel bounding box come normale Come si interseca un bounding box con lo schermo? 2. Interseco bounding box con schermo

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 57/40 Un momento! E il clipping contro il far e il near plane? –detti anche "far plane clipping" e "near plane clipping" left plane near plane bottom plane view frustum top plane far plane right plane

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 58/40 Rasterizzazione triangoli: Il metodo basato su bounding box e test di appartenenza (edge functions): –Vantaggi fortemente parallelizzabile –(gruppi 4x4) clipping diventa facile facile –per i planes UP, DOWN, LEFT e RIGHT –Svantaggi Overhead granding –Si testano molti frammenti inutilmente –Specialmente quando...

M a r c o T a r i n i C o m p u t e r G r a p h i c s / 0 6 U n i v e r s i t à d e l l I n s u b r i a - 59/40 Un caso sfortunato Screen Triangoli: lunghi e stretti messi lungo la direzione diagonale Sinonimo di MALE in computer graphics : (anche per questo, ma non solo) lunghi e stretti = male molti algoritmi portano ad artefatti (come vedremo) circa equilateri = bene robusti con praticamente tutti gli algoritmi