La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.

Presentazioni simili


Presentazione sul tema: "1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla."— Transcript della presentazione:

1 1 Programmazione grafica 1 Daniele Marini

2 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla sua raffigurazione? Le librerie grafiche permettono di descrivere e rappresentare tutti gli elementi del modello permettono anche di controllare il modo della raffigurazione (prospettiva, rendering,..)

3 3 Librerie grafiche Librerie di funzioni che permettono di descrivere e raffigurare un modello geometrico (una forma), es: –OpenGL: libreria di procedure che realizza un API (application programmers interface) –Standard de facto –Disponibile su windows, mac, IRIX, Solaris –Linux dispone di librerie free Mesa - subset di OpenGL –La struttura semantica è simile a quella di altre librerie: GKS, Direct3D, Java3D

4 4 Funzioni essenziali Tutte le librerie devono prevedere funzioni essenziali per definire e manipolare elementi geometrici essenziali: punti, segmenti prevedono anche funzioni per definire e manipolare strutture più complesse: poligoni, poliedri, ecc.

5 5 Caratteristiche di una libreria grafica maschera le funzioni device dependent È strutturata in primitive, attributi, funzioni di visualizzazione, funzioni di trasformazione funzioni di input, funzioni di controllo User program Graphics system API I/O devices Function calloutput input data

6 6 Il livello più elementare: Disegnare al tratto - Line drawing Il plotter a penna, le funzioni: moveto (x,y) lineto (x,y) Anche il controllo di un display può essere descritto in questo stesso modo le funzioni vengono interpretate da un driver

7 7 Disegno al tratto Tracciare linee definite in uno spazio cartesiano piano Modalità molto diffusa ma con limiti: come lavorare in 3D? Come gestire strutture geometriche più evolute?

8 8 Disegno al tratto Possiamo pensare un disegno piano come la proiezione di un disegno tridimensionale Oppure come un disegno definito nello spazio 3d ma con punti su un medesimo piano di equazione z=0

9 9 Disegno al tratto I punti sono descritti da vettori: p(x,y,z) o, nel piano, p(x,y,0) Coppie o n-uple di vettori permettono di definire segmenti, spezzate o poligoni

10 10 I tipi principali sono: punti segmenti spezzate poligoni p1 p2 p3 p4p5 p1 p2 p3 p4p5 p1 p2 p3 p4p5 p1 p2 p3 p4p5

11 11 Poligoni Hanno diversi aspetti Possono essere semplici e intrecciati Convessi o non convessi

12 12 strisce di: triangoli, quadrangoli o ventagli di triangoli p0 p2 p4 p6 p1 p3 p5 p7 p0 p2 p4 p6 p1 p3 p5 p7 aggregati di poligoni

13 13 Il processo base di raffigurazione di una geometria determinare quale parte della geometria raffigurare: trasformazione window_to_viewport decidere quali linee sono visibili e quali esterne alla window: clipping convertire la geometria in pixel: scan conversione di linee e poligoni

14 14 trasformazione window_to_viewport

15 15 Le coordinate schermo La figura precedente è definita in uno spazio cartesiano indipendente dal dispositivo di visualizzazione (display, carta, …) In passato il disegno veniva descritto direttamente in coordinate del dispositivo (es. il plotter) La conversione tra coordinate mondo - world co- ordinates e coordinate dispositivo - device co- ordinates si chiama trasformazione window-to-viewport

16 Spazio mondo / Spazio schermo

17 17 Coordinate mondo WC world co-ordinates Coordinate schermo SC screen co-ordinates window viewport Window in WC: (x min, y min ), (x max,y max ) Viewport in WC: (u min,v min ), (u max,v max ) (x min, y min ) (x max,y max ) (u min,v min ) (u max,v max )

18 18 Traslazione: (-x min,-y min ) Scala: Traslazione inversa : (u min,v min )

19 19 clipping

20 20 Clipping di segmenti Algoritmo di Cohen Sutherland Classificare punti rispetto alle rette che delimitano la finestra - codice a 4 bit: outcode esclusione o inclusione triviale con test sulloutcode per altri segmenti: cercare intersezione con equazione parametrica del segmento

21 21 Outcode: 4 casi o1=o2=0 tutto interno o1 0 o2 = 0 un estremo interno uno esterno, il codice o1 indica quale bordo interseca o1 & o2 0 controllare se stanno dalla stessa parte se sì il segmento viene scartato o1 & o2 = 0 entrambi gli estermi sono esterni ma in semipiani diversi, controllare Il controllo richiede solo operazioni booleane Per calcolare lintersezione con un bordo si usa lequazione della retta y = mx + q ATTENZIONE a segmenti paralleli ai bordi!

22 22 scan conversione di linee e poligoni

23 23 Dalla geometria ai pixel: scan conversione di linee Convertire un segmento i cui estremi sono espressi come coppie di numeri reali, in una serie di PIXEL sullo schermo del computer. Problema di conversione da numero reale a intero e di campionamento su una griglia regolare di punti. Un metodo inadeguato dà luogo a alias molto evidenti; Aliasing è comunque sempre presente.

24 24 Requisiti Velocità luminosità uniforme stile linea antialiasing

25 25 Algoritmo base Calcola rapporto incrementale dy/dx genera punti sulla retta con lequazione esplicita: y i = mx i +b ad ogni passo arrotonda i valori allintero prossimo: Round(y i )=Floor(0.5+y i ) complessità alta: 1 moltiplicazione, 1 somma, 1 arrotondamento ad ogni passo

26 26 (x i,y i ) (x i+1, y i+m ) (x i, Round(y i )) (x i+1, Round(y i+m ))

27 27 Lalgoritmo opera su rette con |m|<=1, e incrementa ad ogni passo x di una unità (rette con pendenza compresa tra -45° e +45°): Per |m|>1 si applica lequazione x=f(y) e si incrementa (o decrementa) y di una unità:

28 28 Metodo incrementale Si evita il prodotto y i+1 = mx i+1 + b = m(x i + dx) + b = y i + mdx Se dx=1 allora y i+1 = y i + m questo metodo è chiamato DDA, Digital Differential Analyzer

29 29 Algoritmo DDA procedure line(x0,y0,x1,y1:float; value:integer); var x:integer; dx,dy,y,m: float; begin dy:=y1-y0; dx:=x1-x0; m:=dy/dx; y:=y0; for x:=x0 to x1 do begin WritePixel(x,Round(y),value); y:=y+m end end.


Scaricare ppt "1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla."

Presentazioni simili


Annunci Google