Spiegazioni dell'esercitazione del 01 Febbraio 2007
http://www.dis.uniroma1.it/~frat
Scopo dell’esercitazione: scopo dell’esercitazione è di prendere confidenza con i principali meccanismi di interazione ed animazione di OpenGL e di GLUT attraverso la modifica e completamento di un semplice programma che visualizza un cubo, con varie tipologie di primitive.
Nota bene: Tutte le operazioni di disegno e di modifica delle matrici
devono (preferibilmente) essere effettuate nella Display Function, chiamata draw
nel nostro caso. Nelle altre funzioni (ad esempio, animation), dovete
soltanto cambiare i valori dei parametri che vengono usati dalla Display
Function.
Cose da fare:
Modificate il codice in modo da visualizzare il cubo in wireframe. Vedere sulle specifiche GLUT il comando glutWireCube.
Modificate il codice in modo da visualizzare il cubo con delle primitive di tipo, GL_POLYGON e di tipo GL_QUADS
Fare una piccola animazione in cui si fa ruotare il cubo intorno all’asse y ogni 30esimo di secondo. Per far ciò:
GLUT richiama ogni 30esimo di secondo la funzione animation, che provvede a modificare la variabile ruota_y e a segnalare che la scena ha bisogno di essere ridisegnata attraverso l’ invocazione di glutPostRedisplay().
La frequenza di aggiornamento viene imposta da un timer definito con glutTimerFunc.
Al momento del disegno, draw disegna il cubo ruotandolo del valore aggiornato di ruota_y.
Provare a modificare la quantità con cui viene incrementata ruota_y a 2, 4, 8. Cosa accade? Perchè?
Riportare l’ incremento di ruota_y a 1. Provare a modificare la frequenza di aggiornamento da 1/30esimo di secondo a 1/60 di secondo modificando la variabile FPS. Cosa accade? Motivare.
Commentare tutte le invocazioni di glutTimerFunc e ad inserire il codice di animation dentro il corpo della funzione idle. Quest’ ultima funzione viene richiamata ripetutamente ogni volta che non ci sono eventi pendenti da processare.
Cosa accade? Perchè?
Commentare il codice all’ interno della funzione reshape, eseguite e provate a cambiare le dimensioni della finestra. Cosa accade? Perchè?
Inserite una sfera di colore blu posizionata con il centro in (0, 3, 0). L’istruzione per il disegno della sfera è glutSolidSphere(r, 10, 10) che disegna una sfera di raggio r con centro nell’origine. Il secondo e terzo parametro definisco il numero di spicchi orizzontali e verticali in cui è divisa la sfera, che in realtà è sfaccettata. Scalate la sfera (glScalef) in modo che diventi un ellissoide con il raggio sull’asse y maggiore di quello sugli assi x e z.
Modificare la funzione keyboardDown in modo da fermare e far ripartire l’ animazione ogni volta che vinee premuta la barra spaziatrice.
Documentazione: Tutta la documentazione su OpenGL / GLUTè disponibile nella directory del corso. Questa contiene i tre files:
glspec15.pdf
glu1.3.pdf
glut-3-spec.pdf