Paola Magillo, Univestita' di Genova, Corso di Interfacce Utente per Informatica, a.a. 2007-2008.

INTRODUZIONE ALLA COMPUTER GRAPHICS

Computer graphics: produzione di immagini mediante elaboratore.

Breve storia

Sviluppo della Computer Graphics parallelo a quello della tecnologia hardware.

Man mano che avanza la tecnica, si cercano di produrre immagini sempre piu' sofisticate (3D, illuminazione, texture, animazione...) che richiedono sempre piu' memoria e potenza di calcolo.

La storia inizia con l'introduzione del tubo a raggi catodici, dispositivo che trasforma impulsi elettrici in immagini, cioe' con l'invenzione dello schermo.

Grafica vettoriale

Dagli anni '60 fino a meta' degli anni '80.

Un fascio di elettroni mobile colpisce la superficie dello schermo disegnando linee.
E' grafica 2D. Si guida il fascio a disegnare figure.

Figura: esempi di primitive grafiche

Grafica raster

Dagli anni '70 in poi.

Lo schermo e' organizzato come una griglia di elementi di immagine o pixel (picture element).
Un fascio di elettroni scandisce lo schermo sequenzialmente riga per riga potendo variare intensita' ad ogni pixel.
E' grafica 2D o 3D. In entrambi i casi prima si traduce la scena in una matrice di pixel (raster) in memoria, e poi la si trasferisce su schermo.
Per ottenere il colore si usano tre fasci di elettroni per i tre colori primari (rosso, verbe, blu).

Figura: immagine raster e la stessa ingrandita per mostrare la struttura a matrice di pixel

Applicazioni della Computer Graphics

  1. Visualizzazione di informazioni
  2. Progettazione
  3. Simulazione
  4. Interfacce utente

Visualizzazione di informazioni

Uso della comunicazione visuale in sostituzione o aggiunta al linguaggio parlato o scritto.

Progettazione

Uso di strumenti grafici interattivi nella progettazione assistita da calcolatore (CAD).

Simulazione

Generazione di immagini sofisticate in tempo reale.

Interfacce utente

Interazione con l'elaboratore tramite paradigma visuale (finestre, menu', icone...).

Sistemi a finestre, interfacce grafiche, interfaccia di sistema.

Un sistema grafico

Cinque componenti principali:

Frame buffer

Area di memoria in genere implementata con chip di memoria speciali (Video Random-Access Memory, VRAM, o Dynamic Random-Access Memory, DRAM).

E' una matrice, controparte in memoria dell'area rettangolare dello schermo (finestra) dove avviene la visualizzazione.

Le dimensioni del frame buffer corrispondono a larghezza ed altezza in pixel della finestra su schermo.

Ospita l'immagine cosi' come e' visualizzata nella finestra.

Il contenuto del frame buffer e' detto matrice o raster di pixel, pixmap (pixel map) o bitmap.

Figura: immagine raster e la stessa a 1/4 della risoluzione (ingrandita alla stessa dimensione)

In genere il frame buffer e' composto da piu' buffer, fra cui

Spesso finestre grafiche hanno double buffer:

Il programma disegna nel back buffer e poi scambia i due buffer in modo da visualizzare istantaneamente quanto disegnato. Invece nelle finestre con single buffer il programma disegna direttamente nel front buffer, e siccome disegnare richiede un certo tempo, questo produce un effetto visivo sgradevole (sfarfallamento).

Elaborazione grafica

Alcuni sistemi grafici hanno hardware specializzato per specifiche funzioni grafiche.

Librerie grafiche

Forniscono funzionalita' relative a:

Fasi dell'elaborazione grafica

  1. Modellazione = definizione degli oggetti da mostrare.
  2. Visualizzazione (o rendering) = generazione dell'immagine.

Modellazione

Compiuta dal programmatore che scrive il codice dell'applicazione grafica.

Il programmatore specifica la geometria degli oggetti da visualizzare mediante primitive geometriche.

Le primitive geometriche corrispondono a oggetti elementari che il sistema "conosce". Sono espresse in forma vettoriale (linee, cerchi, poligoni...).

Assieme alla geometria il programmatore imposta informazioni accessorie che influiranno sulla resa grafica delle primitive:

Il risultato di questa fase e' una scena che esiste in memoria, pronta per essere visualizzata, cioe' per essere trasformata in immagine.

Visualizzazione (o rendering)

Compiuta dal sistema grafico elaborando le primitive, gli attributi e le trasformazioni.

Tramite calcoli, il sistema grafico genera un'immagine raster (determina i valori di colore per i pixel nel frame buffer).
La conversione di primitive vettoriali 2D in immagine raster e' detta rasterizzazione o scan conversion.

Nella grafica 3D, prima della rasterizzazione si ha una traduzione da 3D a 2D fatta in base alla posizione dell'osservatore e alle proprieta' della telecamera. E' un processo complesso che passa attraverso varie fasi. La rasterizzazione avviene solo alla fine.

Stato di un sistema grafico

Attributi e trasformazioni sono parte dello stato del sistema, non sono associati alle primitive.
Non e' una primitiva che e' rossa, ma e' il sistema che sta disegnando con il rosso!

Il codice e' un'alternanza di:

Durante il flusso di esecuzione:

Nei sistemi grafici esiste la possibilita' di salvare lo stato corrente, questo permette di modificare lo stato temporaneamente per poi ripristinarlo.
Es: cambiare il colore in rosso, disegnare qualcosa (che sara' rosso) e poi tornare al colore di prima (qualsiasi esso fosse) per disegnare quel che segue.

Colore

Il colori sono espressi in un sistema di riferimento detto spazio o modello dei colori (color space o color model).

Si specifica come formare un colore mischiando alcuni colori considerati primari:

Modello R G B

Modello di colore additivo in cui si considerano tre colori primari (rosso, verde, blu) che sono mischiati per formare il colore desiderato.

Un colore C e' definito come somma pesata di tre componenti:
C = T1 R + T2 G + T3 B dove
R = red, G = green, B = blue, e Ti = intensita' di colore.

A seconda del sistema, le intensita' Ti possono essere espresse

con la convenzione che

Possiamo vedere un colore come un punto nel cubo dei colori:
nero = (0,0,0)
bianco = (1,1,1)
rosso = (1,0,0)
verde = (0,1,0)
blu = (0,0,1)
giallo = (1,1,0)
ciano = (0,1,1)
magenta = (1,0,1)

Tutti i colori sulla diagonale = toni di grigio.

Modello R G B A

Estensione del modello RGB con componente A detta alpha channel. Il valore di A corrisponde a livello di opacita' o trasparenza, convenzionalmente:

In 2D permette di disegnare immagini con sfondo trasparente.
In 3D permette di disegnare oggetti semitrasparenti (es: vetro).

Trasformazioni di coordinate

Permettono di spostare, cambiare dimensioni, deformare le primitive prima di disegnarle.

A che cosa servono

Il sistema di coordinate finale in cui la scena sara' visualizzata come immagine e' quello della finestra. Tali coordinate della finestra sono espresse in pixel: numeri interi compresi tra 0 e le dimensioni x,y della finestra.

E' comodo "pensare" la scena in un sistema di riferimento "astratto", indipendente dalla dimensione in pixel della finestra nella quale sara' visualizzata.
Per esempio posso "pensare" le mie primitive in un sistema con coordinate reali x,y, tra -100 e 100.
Poi uso trasformazioni per tradurre queste coordinate astratte in coordinate della finestra, qualunque sia la dimensione della finestra.

Le trasformazioni servono anche per comporre una scena formata da piu' oggetti.
Nel caso di scene complesse, puo' essere utile "pensare" alcune sotto-componenti della scena come definite in un loro proprio sistema di coordinate indipendente, e poi trasportarle nella scena globale mediante trasformazioni.
Addirittura la stessa sotto-componente puo' apparire nella scena finale piu' volte, ogni volta posizionata mediante trasformazioni diverse.

Per esempio se devo disegnare varie case e vari alberi, mi conviene definire la casa e l'albero in un loro proprio sistema di coordinate (per es. con l'origine nel punto in basso al centro della casa o dell'albero). E poi inserire nella scena varie copie, ciascuna traslata nel punto opportuno.
La scena finale cosi' ottenuta poi sara' sottoposta globalmente ad altre trasformazioni che la trasportino nel sistema di riferimento in pixel della finestra.

In 3D le trasformazioni sono usate anche per posizionare l'osservatore e impostare le proprieta' della telecamera (apertura e profondita' del campo visivo...).

Trasformazioni affini

Traslazioni, rotazioni, scalature.

Sono trasformazioni rigide: mantengono rette le linee rette e parallele le linee parallele.

Noi le vediamo brevemente solo in 2D. Sono trattate molto piu' diffusamente, in 3D, e con tutta la teoria, nel corso di Grafica Interattiva.

I nostri oggetti (primitive geometriche) sono descritti in termini di vertici, basta applicare la trasformazione ai vertici.

Traslazione

Traslare un punto = spostarlo di una certa distanza in una certa direzione.
Traslare un oggetto = traslare solidalmente tutti i suoi punti.

Parametro = vettore di traslazione (tx,ty).
Se P = (x,y) e' un punto, il punto traslato e' P' = (x+tx,y+ty) = (x,y) + (tx,ty).

Nota: la traslazione inversa corrisponde al vettore di traslazione cambiato di segno (-tx,-ty).

Scalatura

Scelto un punto C che rimane fermo, scalare un punto = riposizionarlo ricalcolando le sue distanze (nella direzione di ciascun asse coordinato) da C in base ad una nuova unita' di misura.
Scalare un oggetto = scalare (riposizionare rispetto al punto fermo C) tutti i suoi punti.

Vediamo scalatura con punto fermo l'origine.

Parametri = fattori di scala (sx,sy).
Se P = (x,y) e' un punto, il punto scalato e' P' = (sx*x,sy*y).


La scalatura tenendo fermo un punto generico C diverso dall'origine si ottiene come combinazione di trasformazioni (ved. dopo).

Nota: se i fattori di scala sono negativi, ottengo una riflessione speculare.


Rotazione

Scelto un punto R ed un verso di rotazione (orario o antiorario), ruotare un punto = muoverlo attorno ad R di un certo angolo nel verso assegnato.

Ruotare un oggetto = muovere ciascun punto dell'oggetto solidalmente dello stesso angolo attorno al punto R.

Vediamo la rotazione attorno all'origine.
Parametri di questo specifico caso: angolo di rotazione alfa (alfa > 0 per senso antiorario, alfa < 0 per senso orario).
Se P = (x,y) e' un punto, il punto ruotato e' P' = (x',y'), dove:


La rotazione attorno ad un punto diverso dall'origine si ottiene come combinazione di trasformazioni (ved. dopo).

Composizione di trasformazioni

Tutte le trasformazioni rigide si ottengono per composizione a partire da un insieme minimale di trasformazioni di base:

Composizione = eseguire le trasformazioni in sequenza.

Esempio: Scalatura tenendo fermo un punto generico.
Sia C=(x0,y0) il punto che deve restare fermo.

Esempio: Rotazione attorno ad un asse passante per un punto generico.
Si fa in modo analogo alla scalatura.

Proprieta' della composizione di trasformazioni

La composizione di trasformazioni in generale non e' commutativa. Esempio:


La composizione di trasformazioni dello stesso tipo e' commutativa (traslazioni con traslazioni, scalature con fermo lo stesso punto, rotazioni attorno allo stesso punto).

Esempio

Le coordinate astratte della scena hanno sia x che y nell'intervallo -100,100. I valori delle y come di consueto crescono dal basso verso l'alto.
La finestra grafica e' larga w pixel e alta h. Le coordinate di finestra sono tra 0 e w-1 in orizzontale e tra 0 e h-1 in verticale. Nelle finestre l'origine e' in alto a sinistra, quindi i valori delle y crescono dall'alto verso il basso.

Dato un punto P di coordinate astratte (x,y), trovare le sue coordinate di finestra (x',y').

  1. prima traslazione che porti (-100,-100) nell'origine: vettore (100,100)
  2. poi scalatura che porti la larghezza 200 a w e l'altezza 200 a h: fattori w/200 e h/200.
  3. infine capovolgere la y.
Percio x' = (x+100)*w/200, e y' = h - (y+100)*h/200,