Laboratorio di Interfacce Grafiche A.A. 1997-98
Esercizio 3
Argomento: XForms e OpenGL.
Trovate due programmi esempio:
esgl1.c apre una
canvas per OpenGL e disegna alcune primitive 2D;
e' l'esempio piu' semplice da cui partire per prendere
dimistichezza.
esgl2.c
disegna invece una scena 3D; dovrete modificarlo aggiungendo
elementi di interfaccia che permettano di compiere operazioni
sulla scena.
Il makefile
e' sempre lo stesso.
Sul primo programma (esgl1):
-
Provare le varie versioni della definizione del triangolo
(usando alternativamente drawTriangle1, drawTriangle2 o drawTriangle3
nella drawScene):
una disegna un triangolo in rosso, lasciando poi il colore corrente
rosso, una disegna un triangolo in rosso, rispristinando il colore
corrente precedente (in questo caso quello di defauls=bianco) e
una disegna un triangolo con tre colori diversi per i tre vertici.
-
Provare a cambiare attributi: colore (glColor), modo di resa dei poligoni
(glPolygonMode), dimensione punti (glPoint), spessore di linea
(glLineWidth).
-
Provare a vedere come viene gestito il redimensionamento della
canvas se non associo l'handler dell'evento ConfigureNotify
(commentando la corrispondente fl_add_canvas_handler nel main).
Sul secondo programma (esgl2):
-
Dare all'utente la possibilita' di cambiare il modo di rendering dei
poligoni tra GL_FILL, GL_LINE, GL_POINT.
-
Come sopra, ma per ciascuno dei due oggetti (piramide e prisma)
separatamante.
-
Dare all'utente la possibilita' di eliminare/reintrodurre
nella scena ciascuno dei due oggetti.
-
Focalizzarsi per semplicita' su una faccia di un oggetto, e
dare all'utente la possibilita' di controllarne il colore assegnando
le tre componenti R,G,B.
Usare per esempio uno slider per assegnare la quantita' di rosso,
verde e blu.
Per chi non ne ha abbastanza:
-
La funzione OpenGL glRotatef(angolo,x,y,z) permette di ruotare
la scena di un angolo (dato in gradi) attorno a un asse passante
per l'origine, e specificato tramite il suo versore (x,y,z),
prima di visualizzarla.
-
Per ruotare la scena di esgl2 attorno all'asse y (quello che mi appare
verticale), devo inserire
glRotatef(angolo,0.0,1.0,0.0) nella drawScene, prima del primo
glBegin.
-
Provare a inserirla, e permettere all'utente di controllare
interattivamente l'angolo di rotazione.
Nota: ogni volta che l'utente modifica l'angolo di rotazione
occorre chiamare drawScene per rivisualizzare la scena.