ESEMPIO DI SCRITTO DI INTERFACCE GRAFICHE - A.A. 1998-99 -------------------------------------------------------- Tempo: 3 ore e mezza DOMANDE DI TEORIA Sulla parte interfacce 1) - Che cosa e' un ambiente a desktop? - Che cosa e' la metafora del desktop (o metafora della scrivania)? - Quali sono le componenti di un ambiente a desktop? Che ruolo ha ciascuna di esse? 2) - In che cosa consiste il problema del mantenimento del contenuto di una finestra? Quando si verifica? - Come puo' essere trattato tale problema? Fare almeno un esempio. - Come e' trattato tale problema in OpenGL/XForms? Sulla parte grafica 1) - Che cosa sono le primitive geometriche? - Come si specificano le primitive grafiche in OpenGL (non la sintassi precisa, ma l'idea). - Fare alcuni esempi di primitive OpenGL. 2) - Che cosa si intende per trasformazioni rigide? Quali sono le trasformazioni rigide di base? - Come si definiscono le coordinate omogenee? - Come si esprime nel caso 3D una traslazione in coordinate cartesiane? e in coordinate omogenee? ESERCIZI 1) Supponendo di avere a disposizione la display list "cubo", che disegna un cubo con facce parallele ai piani coordinati e diagonale (0,0,0) - (1,1,1), si consideri il seguente frammento di codice: glColor3f(1.0,0.0,0.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glPushMatrix(); glTranslate(2.0, 2.0, 0.0); glScalef(1.0, 1.0, 10.0); glCallList(cubo); glPopMatrix(); glPushMatrix(); glTranslate(0.0, 0.0, 10.0); glScalef(5.0, 5.0, 1.0); glCallList(cubo); glPopMatrix(); - Come e' fatta la scena risultante? a quali trasformazioni e' sottoposto e in che ordine ciascuna delle due istanze del cubo? - Che cosa succederebbe se eliminassimo le chiamate a glPushMatrix e glPopMatrix? - Come dovremmo modificare il codice se volessimo dare a ciascuna istanza del cubo un colore diverso? - Modificare il codice per formare una scena che rappresenta un tavolo fatto da un piano e 4 gambe (le dimensioni a piacere). 2) Dato il seguente programma XForms: void slidercallback(FL_OBJECT *ob, long user_data) { float v = fl_get_slider_value(ob); printf(...,v); } int main(...) { FL_OBJECT *obj; FL_FORM *form; fl_initialize(...); form = fl_bgn_form(FL_FLAT_BOX,200,320); obj = fl_add_slider(FL_VERT_SLIDER,30,50,40,180,"slider1"); fl_set_slider_bounds(obj,-1.0,1.0); fl_set_slider_value(obj,0.5); fl_set_object_callback(obj,slidercallback,0); obj = fl_add_box(FL_DOWN_BOX,30,260,40,30,""); fl_set_object_label(obj,"--"); fl_end_form(); fl_show_form(form,...); fl_do_forms(); } - Che aspetto ha l'interfaccia realizzata dal programma? Illustrare con una figura. - Come si comporta tale interfaccia? - Modificare il programma in modo tale che stampi il valore dello slider su un box nella form anziche' su standard output. - Aggiungere un altro slider e fare si' che il secondo slider in ogni momento abbia valore uguale al valore del primo slider cambiato di segno (mantenere la consistenza sia quando l'utente aziona il primo slider che quando aziona il secondo).