Spiegazioni dell'esercitazione del 01 Febbraio 2007

 

Docente: Prof. Marco Schaerf
http://www.dis.uniroma1.it/~schaerf


Tutor: Ing. Marco Fratarcangeli

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