Laboratorio di Grafica Interattiva A.A. 2002-3
Esercizio 1
Argomento
Primitive grafiche e attrituti pittorici in OpenGL,
meccanismi per gestire l'interazione con l'utente in Glut.
Files
Il makefile che sara' usato anche per gli esercizi
successivi. Per compilare un programma chiamato xxx.c
digitare make PROG=xxx.
Il programma primitiv.c
apre una finestra grafica
e vi disegna una scena bidimensionale costituita da un insieme
di punti.
Non e' prevista interazione con l'utente.
Per terminare, distruggere la finestra usando il pulsante
di controllo nell'angolo in alto a sinistra.
Esercitazione guidata
Prima tappa
Provate a compilare ed eseguire.
Guardate il codice. Il programma ha due funzioni:
- display che e' la funzione incaricata di disegnare la scena
all'interno della finestra
- main che inizializza Glut, crea la finestra,
registra la funzione display come display callback
e fa partire il main loop
Guardare i commenti presenti nel codice che spiegano le varie fasi
eseguite sia dalla display che dal main.
Seconda tappa
Quando l'utente cambia dimensioni alla finestra, la scena
viene comunque tracciata usando come viewport l'intera finestra.
Di le proporzioni del disegno vengono alterate se la finestra non
e' piu' quadrata.
Inserite una reshape callback che preservi le proporzioni
(apect ratio) del disegno:
-
Siano w,h la larghezza e l'altezza correnti della
finestra (in pixel), parametri passati da Glut alla
reshape callcack.
-
La reshape callback calcola una sottoparte quadrata della finestra
(di lato pari alla dimensione minore), centrata nella finestra,
ed assegna quella come nuova viewport.
+-----------------------------------------------+
| +----------+ |finestra
| | |viewport |rettangolare
| | |quadrata |
| | | |
| | | |
| +----------+ |
+-----------------------------------------------+
Terza tappa
Provate a fare semplici modifiche al codice, per esempio:
- cambiare il tipo di primitiva, ora GL_POINTS
- cambiare le posizioni dei vertici
- cambiare i valori degli attributi
(point size, line width, polygon mode, colore)
Per alcuni tipi di primitive la configurazione di vertici data non e'
adatta. Quali?
Trovate una configurazione di vertici adatta per questi casi.
Provate anche ad assegnare valori di colore diversi ai vertici
della primitiva e a vedere come il colore viene interpolato
(da sperimentare con tutti e tre i tipi di polygon mode).
Disegnate anche gli assi cartesiani
sovrapposti alla scena (basta disegnarli per ultimi).
Quarta tappa
Aggiungete una rudimentale interazione con l'utente:
- l'utente imposta il point size premendo il
tasto "p" o "P" seguito da un numero (intero a 1 cifra) che corrisponde
alla dimensione di punto voluta
- imposta la line width similmente premendo il tasto "l" o "L"
seguito dallo spessore voluto
- l'utente sceglie da menu' il tipo di primitiva
Il programma deve scegliere automaticamente una configurazione di
vertici adatta al tipo di primitiva impostato dall'utente.
Quinta tappa
Sostituite alla precedente una gestione piu' raffinata
dell'interazione con l'utente.
Organizzate tutte le opzioni in
unico menu' a cascata azionabile con il tasto destro del mouse:
-
il menu' ha tre voci: "primitiva", "attributi" e
"assi", le prime due sono sottomenu'
-
il menu' "primitiva" permette di scegliere la primitiva
fra quelle disponibili in OpenGL
-
il menu' attributi ha a sua volta quattro sottomenu':
"point size", "line width", "polygon mode", "color"
-
i menu' "point size" e "line width" hanno
come voci alcuni valori fissi: 1, 2, 3...
-
il menu' "polygon mode" ha tre voci coriispondenti ai tre possibili valori
-
il menu' "color" ha un insieme di voci corrispondenti ai principali
colori: rosso, verde, blu, giallo...
-
la voce "assi" mostra o nasconde gli assi cartesiani
(se sono mostrati si nascondono, se sono nascosti si mostrano)
Fate in modo che l'utente possa terminare il programma premendo
il tasto "q", "Q' oppure ESC (tasto speciale).
Compito
Estetica degli assi cartesiani
Disegnate gli assi cartesiani tratteggiati
e con due freccine che indicano il verso positivo degli assi.
Occorre abilitare il polygon stipple.
Stili di linea e trame di riempimento
Inserite la possibilita' di scegliere diversi stili
di linea e diverse trame di riempimento.
Il menu' a cascata viene cosi' riorganizzato:
-
al primo livello (accanto a "primitive", "attributi" e "assi")
aggiungete un sottomenu' "modi"
-
il menu' "modi" ha due voci "line stipple" e "polygon stipple"
che abilitano/disabilitano il modo OpenGL corrispondente
-
nel menu' "attributi" aggiungere due sottomenu':
"line styles" e "polygon textures"
-
il menu' "line styles" permette di scegliere diversi stili
di linea: continua, tratteggiata, punto-linea...
-
il menu' "polygon textures" permette di scegliere diverse trame di
riempimento: pieno, a righe, quadrettato...