La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Informatica Grafica Algoritmi 2D1 Grafica Raster l La grafica in 2D con coordinate intere viene detta grafica raster. l In questa parte tratteremo le operazioni.

Presentazioni simili


Presentazione sul tema: "Informatica Grafica Algoritmi 2D1 Grafica Raster l La grafica in 2D con coordinate intere viene detta grafica raster. l In questa parte tratteremo le operazioni."— Transcript della presentazione:

1 Informatica Grafica Algoritmi 2D1 Grafica Raster l La grafica in 2D con coordinate intere viene detta grafica raster. l In questa parte tratteremo le operazioni fondamentali per disegnare su dispositivi raster come lo schermo.

2 Informatica Grafica Algoritmi 2D2 Algoritmi Fondamentali in 2D l Problemi per implementare le operazioni di OpenGL, Java e di sistemi più complessi. l Disegno di linee e curve. Filling di primitive. Algoritmi di clipping. l Tecniche di antialiasing.

3 Informatica Grafica Algoritmi 2D3 Scan Converting Lines Assumiamo: l pendenza tra -1 ed 1 altrimenti vale ragionamento analogo. l spessore della linea unitario. l uguale spaziatura orizzontale e verticale. l Solo un pixel per colonna deve essere illuminato.

4 Informatica Grafica Algoritmi 2D4 Basic Incremental Algorithm M= Y/ X(X0,Y0) uno degli end-points IDEA : illuminare in ogni colonna il pixel più vicino alla intersezione. Calcolare il nuovo punto incrementalmente.

5 Informatica Grafica Algoritmi 2D5 Implementazione void Line(int x0, int y0, int x1, int y1, int value) {/* Assumes -1<=m<=1, x0

6 Informatica Grafica Algoritmi 2D6 Midpoint Line Algorithm l Assume pendenza tra 0 e 1. l Avendo scelto P il prossimo può essere E o NE. l Eq. della retta: F(X,Y)= Y*X-X*Y +B*X=0 Y = Y 1 -Y 0 X = X 1 -X 0 B = intersezione con X=0

7 Informatica Grafica Algoritmi 2D7 Calcolo di d d = F(M) = F(Xp+1,Yp+1/2) E: d new = F(M) = F(Xp+2,Yp+1/2) = = Y(Xp+2) - X(Yp+1/2) + B* X = = Y + Y(Xp+1) - X(Yp+1/2) + B* X = Y+d old NE: d new = F(M) = F(Xp+2,Yp+3/2) = = Y(Xp+2) - X(Yp+3/2) + B* X = = Y - X + Y(Xp+1) - X(Yp+1/2) + B* X = = Y- X+d old Allinizio: (Xp,Yp) = (X0,Y0) d = F(X0+1,Y0+1/2) = = F(X0,Y0) + Y - X/2 = Y - X/2

8 Informatica Grafica Algoritmi 2D8 Implementazione IDEA: Per non usare variabili reali moltiplico tutte le grandezze per 2. Quindi inizializzo d= 2* Y - X void MidpointLine(int x0, int y0, int x1, int y1, int value) {int dx, dy, incrE, incrNE, d, x, y; /* Only integer variables */ dx = x1 - x0;dy = y1 - y0; d = dy*2 - dx; incrE = dy*2; /* Initial value of d and Increment used for E */ incrNE = (dy-dx)*2;/* Increment used for move to NE */ x = x0; y = y0; WritePixel(x, y, value); /* The start pixel */ while(x < x1){ if (d <= 0) {d += incrE; x++;} /* Choose E */ else {d += incrNE; x++; y++; } /* Choose NE */ WritePixel(x, y, value); /* The selected pixel closest to the line */ }

9 Informatica Grafica Algoritmi 2D9 Esempio di Midpoint Problemi: 1) linee da P0 a P1 e da P1 a P0 possono non coincidere se si attraversa esattamente un midpoint. 2) linee clippate possono risultare sfalsate. 3) differenze di intensità di linee con pendenze diverse.

10 Informatica Grafica Algoritmi 2D10 Intersezione con Clip Rectangle l Nel caso (a) bisogna inizializzare d con F(M). l Nel caso (b) bisogna trovare il punto B che ha valore: Round ((X ( Y min -1/2) ),Y min )

11 Informatica Grafica Algoritmi 2D11 Variazioni Di Intensità l Linea A lunghezza 10. Linea B lunghezza 10 SQRT(2) ma stesso numero di pixel. Soluzione: intensità legata alla pendenza (solo su schermi antialiasing non BW)

12 Informatica Grafica Algoritmi 2D12 Disegno Di Circonferenze EQ: X 2 + Y 2 = R 2 assumendo centro nellorigine incrementando X di 1 e prendendo la Y corrispondente: l Metodo costoso e non di buona qualità Meglio : (Rcos, Rsin ) con 0 < < 90º ma computazionalmente inefficiente

13 Informatica Grafica Algoritmi 2D13 Osservazione l Per disegnare una circonferenza basta un ottavo (45º). l Generalmente si sceglie il secondo ottante. void CirclePoints (float x, float y, int val); { WritePixel(x,y,val); WritePixel(y,x,val); WritePixel(y,-x,val); WritePixel(x,-y,val); WritePixel(-x,-y,val); WritePixel(-y,-x,val); WritePixel(-y,x,val); WritePixel(-x,y,val); } l Si genera il resto con una procedura che replica i punti.

14 Informatica Grafica Algoritmi 2D14 Algoritmo Mid Point Dato P devo scegliere tra E ed SE F(X,Y)=X 2 +Y 2 -R 2 vale: 0 sul cerchio + fuori -dentro

15 Informatica Grafica Algoritmi 2D15 Calcolo di d d=F(M)= F(X p +1,Y p -1/2) se d<0 ( scelgo E) d new = F(X p +2,Y p -1/2)=(X p +2) 2 +(Y p -1/2) 2 -R 2 = = X p 2 +4X p +4+Y p 2 -Y p +1/4-R 2 = = 2X p +3+(X p +1) 2 +(Y p -1/2) 2 -R 2 = = 2X p +3+d old se d>0 (scelgo SE) d new = d old +(2 X p -2 Y p +5) allinizio (X 0,Y 0 )=(0,R)d start = 5/4-R

16 Informatica Grafica Algoritmi 2D16 Implementazione Midpointcircle void MidpointCircle(int radius, int value) {int x, y;float d; /* Initialization */ x = 0;y = radius; d = 5.0/4 - radius; CirclePoints(x, y, value); while(y > x){ if (d < 0) { d += x* ; x++; } /* Select E */ else{ d += (x - y)* ; x++; y--; }/* Select SE */ CirclePoints(x, y, value); } PROBLEMA: D é reale SOLUZIONE: prendere H = D - 1/4 e sostituirlo a D D H H<0 Poiché H sarà sempre intero.

17 Informatica Grafica Algoritmi 2D17 Variante Intera void MidpointCircle(int radius, int value) {int x, y, d; x = 0; y = radius; d = 1 - radius; /* Initialization */ CirclePoints(x, y, value); while(y > x) { if (d < 0) { d += x*2 + 3; x++; }/* Select E */ else { d += (x -y )*2 + 5; x++; y--;} /* Select SE */ CirclePoints(x, y, value); } In questo modo si usano solo variabili intere.

18 Informatica Grafica Algoritmi 2D18 Ulteriore Miglioramento l Elimina tutte le moltiplicazioni dal corpo. Calcola E e SE incrementalmente. void MidpointCircle(int radius, int value) {int x, y, d, deltaE, deltaSE; x = 0; y = radius; d = 1 - radius;/* Initialization */ deltaE = 3; deltaSE = 5 - radius * 2; CirclePoints(x, y, value); while (y > x) { if (d < 0) { d += deltaE; deltaE += 2; deltaSE += 2; x++; } else {d += deltaSE; deltaE += 2; deltaSE += 4; x++; y--;} CirclePoints(x, y, value); }

19 Informatica Grafica Algoritmi 2D19 Disegno Di Ellissi EQ: B 2 X 2 +A 2 Y 2 -A 2 B 2 =0 l Disegnamo un quadrante(altri per simmetria). l Dividiamo il quadrante in 2 regioni, regione 1 da (0,B) fino al punto a derivata pari a -1 e regione 2 da questo punto fino ad (A,0). nella regione 1 il prossimo sarà E o SE nella regione 2 il prossimo sarà SE o S l Applichiamo il metodo del Midpoint.

20 Informatica Grafica Algoritmi 2D20 Filling Idea: individuare le sequenze orizzontali di pixels contenuti nella primitiva (ovvio per rettangoli, più complesso per i poligoni). Problema: la frontiera fa parte della primitiva ? Soluzione: solo la frontiera sinistra ed inferiore. ALGORITMO BASE Per ogni scan-line: 1) trova le intersezioni con i lati. 2) ordina le intersezioni per x crescenti. 3) riempi i pixels tra coppie di intersezioni. Usa la regola pari/dispari

21 Informatica Grafica Algoritmi 2D21 Esempi Nota: a è acceso d è spento a) punti ottenuti con MidPoint. b) Punti interni.

22 Informatica Grafica Algoritmi 2D22 Casi Particolari Problema: come distinguere i 3 casi? Soluzione: sommare 1 per ogni segmento che ha y minima nel vertice. 1) sommo 1, cambio parità. 2) sommo 2, scrivo il pixel ma non cambio parità. 3) sommo 0. nessuna operazione

23 Informatica Grafica Algoritmi 2D23 Esempio Trattamento delle righe orizzontali

24 Informatica Grafica Algoritmi 2D24 Slivers l Poligoni molto stretti possono dare problemi. l Vertici: (0,0) (3,12) (5,12) (0,0) l Le scan lines per y=1 ed y=2 non incontrano nessun pixel. l Nessuna buona soluzione. l Parzialmente risolto usando Antialiasing.

25 Informatica Grafica Algoritmi 2D25 Calcolo Intersezioni Servono strutture dati efficienti: edge table (ET) active-edge table (AET) ALGORITMO 1) trova il minimo y in ET 2) vuota AET 3) ripeti fino a che (AET vuota) and (ET vuota) 3.1) muovi la lista Y=Y min da ET a AET e ordina AET 3.2) accendi i pixel 3.3) elimina da AET gli elementi con Y max = Y 3.4) aumenta Y di 1 ed X di conseguenza

26 Informatica Grafica Algoritmi 2D26 Strutture Dati Sorted Edge table Active Edge Table

27 Informatica Grafica Algoritmi 2D27 Filling Con Patterns l Complicazione Addizionale: ricerca del pattern. l Per disegni che si ripetono può convenire generare bitmaps. Disegno con pattern e trasparenza

28 Informatica Grafica Algoritmi 2D28 Spessore l Vedremo 2 metodi fondamentali: 1) Replica di colonne. 2) Uso di penne spesse.

29 Informatica Grafica Algoritmi 2D29 Replica di Colonne Efficiente, ma non molto preciso.

30 Informatica Grafica Algoritmi 2D30 Penna Rettangolare Più spesso dove la pendenza é maggiore.

31 Informatica Grafica Algoritmi 2D31 Clipping Caratteristica fondamentale necessaria: Efficienza 3 modi diversi: 1) Clipping analitico. 2) Clipping durante scan conversion. 3) Attraverso Canvas e Copy_pixel. 1) Applicabile a packages grafici interi e virgola mobile, 2D e 3D 2) - 3)solo interi e 2D (grafica raster)

32 Informatica Grafica Algoritmi 2D32 Clipping di Linee Idea: analizziamo solo gli estremi. Semplice se i 2 estremi (od anche uno solo ) sono nel clip rectangle. Soluzione semplice ma inefficiente: calcolare le intersezioni con le 4 linee del clip rectangle.

33 Informatica Grafica Algoritmi 2D33 Algoritmo Cohen-Sutherland Idea: Assegnare ad ogni estremo un codice di 4 bit Esempio: Prendo i codici dei due estremi AND bit a bit se <> si può scartare. Se non si può scartare allora divido la linea in 2 segmenti.

34 Informatica Grafica Algoritmi 2D34 Dividere una Linea l Scelgo un estremo esterno e calcolo l intersezione con un lato del clip rectangle. l Ordine dei lati del clip rectangle: top-bottom-right-left.

35 Informatica Grafica Algoritmi 2D35 Algoritmo Parametrico Cyrus-Beck valore di t alla intersezione con il lato di P E i : t={ N i [ P ø - P E i ]} / (-N i D)con D vettore P ø P 1 Eq. parametrica linea: P(t)=P ø +(P 1 -P ø )t N I normale verso lesterno del clip rectangle. P E i punto arbitrario sul clip rectangle.

36 Informatica Grafica Algoritmi 2D36 Calcolo di t N i x [ P(t) - P E i ] = 0 N i x [ P ø +(P 1 -P ø )t - P E i ] = 0 N i x [ P ø - P E i ] + N i x (P 1 -P ø ) t =0 t = { N i x [ P ø - P E i ]} / (-N i x D) Quali intersezioni sono interessanti? se t non appartiene a [0,1] allora si scarta - se t appartiene a [0,1] non é detto (per es. linea 1 e 2 nella slide seguente). Etichetto le intersezioni come: PE potentially entering PL potentially leaving

37 Informatica Grafica Algoritmi 2D37 Calcolo Intersezioni Se N i D PEN i D > 0 => PL Dobbiamo trovare una sequenza (PE, PL) calcolo t E = massimo t tale che P(t E ) = PE (uno dei) calcolo t L = minimo t tale che P(t L ) = PL (uno dei ) PE= potentially entering PL= potentially leaving

38 Informatica Grafica Algoritmi 2D38 Implementazione {precalculate Ni and select a PEi for each edge for ( each line segment to be clipped ) { if (P1 = P0) line is degenerate so clip as a point; else{ tE = 0; tL = 1; for( each candidate intersection with a clip edge ){ if( Ni. D !=0 ) /* Ignore edges parallel to line */ {calculate t; use sign of Ni. D to categorize as PE or PL; if( PE ) tE = max(tE, t); if( PL ) tL = min(tL, t);} } if(tE > tL) return nil; else return P(tE) and P(tL) as true clip intersections; }} }

39 Informatica Grafica Algoritmi 2D39 Clipping di Poligoni Caso critico: (a) connesso non connesso clipping Molte situazioni diverse:

40 Informatica Grafica Algoritmi 2D40 Algoritmo Sutherland-Hodgman Ad ogni passo clippa il poligono contro la retta del clip rectangle. Si applica anche ad aree di clipping non rettangolari. Ripeti il clipping per tutti i lati del clip rectangle

41 Informatica Grafica Algoritmi 2D41 Clip Lato-Retta Devo generare i nuovi vertici : 1: output P2: output I 3: no output 4: output I,P l S nodo analizzato al passo precedente l S-P lato del poligono analizzato

42 Informatica Grafica Algoritmi 2D42 Antialiasing Problema: effetto scalini (staircasing). Risolto solo in parte dallaumento della risoluzione. Idea: 1) retta = rettangolo. 2) Accensione parziale dei pixels.

43 Informatica Grafica Algoritmi 2D43 Intensità Pixels Intensità proporzionale allarea coperta

44 Informatica Grafica Algoritmi 2D44 Sampling non Pesato Calcola larea dellintersezione di ogni pixel con il rettangolo di spessore 1.

45 Informatica Grafica Algoritmi 2D45 Sampling Pesato Calcola larea dellintersezione, ma pesando in funzione della distanza dal centro del pixel.


Scaricare ppt "Informatica Grafica Algoritmi 2D1 Grafica Raster l La grafica in 2D con coordinate intere viene detta grafica raster. l In questa parte tratteremo le operazioni."

Presentazioni simili


Annunci Google