1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla...
-
Upload
efisio-sarti -
Category
Documents
-
view
216 -
download
0
Transcript of 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla...
![Page 1: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/1.jpg)
1
Programmazione grafica1
Daniele Marini
![Page 2: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/2.jpg)
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, ..)
![Page 3: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/3.jpg)
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 programmer’s 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
![Page 4: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/4.jpg)
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.
![Page 5: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/5.jpg)
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 programGraphics system
APII/O devices
Function call output
inputdata
![Page 6: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/6.jpg)
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 questostesso modo
le funzioni vengono interpretateda un driver
![Page 7: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/7.jpg)
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?
![Page 8: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/8.jpg)
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
![Page 9: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/9.jpg)
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
![Page 10: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/10.jpg)
10
• I tipi principali sono:
punti
segmenti
spezzate
poligoni
p1p2
p3
p4p5
p1p2
p3
p4p5
p1p2
p3
p4p5
p1p2
p3
p4p5
![Page 11: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/11.jpg)
11
Poligoni
Hanno diversi aspetti
Possono essere semplici e intrecciati
Convessi o non convessi
![Page 12: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/12.jpg)
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
![Page 13: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/13.jpg)
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
![Page 14: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/14.jpg)
14
trasformazione window_to_viewport
![Page 15: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/15.jpg)
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
![Page 16: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/16.jpg)
Spazio mondo /Spazio schermo
![Page 17: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/17.jpg)
17
Coordinate mondoWC world co-ordinates
Coordinate schermoSC screen co-ordinates
window viewport
Window in WC: (xmin, ymin), (xmax,ymax)
Viewport in WC: (umin,vmin), (umax,vmax)
(xmin, ymin)
(xmax,ymax)
(umin,vmin)
(umax,vmax)
![Page 18: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/18.jpg)
18
Traslazione: (-xmin,-ymin)
Scala: umax−umin
xmax−xmin
,vmax−vmin
ymax−ymin
⎛
⎝ ⎜ ⎜
⎞
⎠ ⎟ ⎟
Traslazione inversa : (umin,vmin)
![Page 19: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/19.jpg)
19
clipping
![Page 20: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/20.jpg)
20
Clipping di segmentiAlgoritmo di Cohen Sutherland
• Classificare punti rispetto alle rette che delimitano la finestra - codice a 4 bit: outcode
• esclusione o inclusione triviale con test sull’outcode
• per altri segmenti: cercare intersezione con equazione parametrica del segmento
![Page 21: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/21.jpg)
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 booleanePer calcolare l’intersezione con un bordo si usa l’equazione della retta y = mx + q
ATTENZIONE a segmenti paralleli ai bordi!
![Page 22: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/22.jpg)
22
scan conversione di linee e poligoni
![Page 23: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/23.jpg)
23
Dalla geometria ai pixel:scan conversione di linee
Convertire un segmento i cui estremi sono espressi comecoppie di numeri reali, in una serie di PIXEL sullo schermodel computer.
Problema di conversione da numero reale a intero e dicampionamento su una griglia regolare di punti.
Un metodo inadeguato dà luogo a “alias” molto evidenti;Aliasing è comunque sempre presente.
![Page 24: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/24.jpg)
24
Requisiti
• Velocità
• luminosità uniforme
• stile linea
• antialiasing
![Page 25: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/25.jpg)
25
Algoritmo base
• Calcola rapporto incrementale dy/dx
• genera punti sulla retta con l’equazione esplicita: yi = mxi +b
• ad ogni passo arrotonda i valori all’intero prossimo: Round(yi)=Floor(0.5+yi)
• complessità alta: 1 moltiplicazione, 1 somma, 1 arrotondamento ad ogni passo
![Page 26: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/26.jpg)
26
(xi,yi)
(xi+1, yi+m)(xi, Round(yi))
(xi+1, Round(yi+m))
![Page 27: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/27.jpg)
27
• L’algoritmo 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 l’equazione x=f(y) e si incrementa (o decrementa) y di una unità:
![Page 28: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/28.jpg)
28
Metodo incrementale
• Si evita il prodotto
• yi+1 = mxi+1 + b = m(xi + dx) + b = yi + mdx
• Se dx=1 allora yi+1 = yi + m
• questo metodo è chiamato DDA, Digital Differential Analyzer
![Page 29: 1 Programmazione grafica 1 Daniele Marini. 2 Dal modello alla sua raffigurazione Come passo dalla descrizione astratta, geometrica di un modello alla.](https://reader035.fdocumenti.com/reader035/viewer/2022062701/5542eb69497959361e8d4d72/html5/thumbnails/29.jpg)
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
beginWritePixel(x,Round(y),value);y:=y+mend
end.