SECONDO PROGETTO DI INTERFACCE - A.A. 2001-2002 - VECCHIO ORDINAMENTO

SECONDO PROGETTO DI INTERFACCE - A.A. 2001-2002

VECCHIO ORDINAMENTO

OBIETTIVO

Creare un programma che legge un file di input contenente triangoli che definiscono un oggetto solido, visualizza tali triangoli, e consente all'utente di agire sulla scena visualizzata.

FUNZIONALITA' DEL PROGRAMMA

  1. Visualizzare i triangoli, centrandoli nell'area grafica, sotto l'influsso di una trasformazione di proiezione ortogonale o prospettica (come preferite).

  2. Illuminarli con una sorgente all'infinito che emetta luce ambiente e luce diffusa, in modo da creare effetto 3D.
    Prevedere le modalita' di visualizzazione "flat shading" (facce piatte) e "smooth shading" (facce smussate). L'utente passa da una modalita' all'altra premendo il tasto 'm'.

  3. Permettere all'utente di cambiare il colore dell'oggetto tra bianco, rosso, verde, blu. L'utente imposta il colore premendo i tasti lettera "w" (white), "r" (red), "g" (green), "b" (blue).

  4. Permettere all'utente di ruotare l'oggetto muovendo il mouse a bottone premuto:

  5. Permettere all'utente di eseguire zoom per ingrandire/rimpicciolire l'immagine della scena.
    L'ingrandimento/riduzione avvengono quando l'utente preme i tasti '+' e '-' rispettivamente. La scena rimane centrata nella finestra.

  6. Prevedere una seconda sorgente luminosa mobile collocata in un punto al finito nei pressi della scena (es. inizialmente in uno dei vertici dei triangoli). Visualizzare la sorgente come un punto. Fare emettere alla sorgente una luce colorata (in modo da distinguerla dalla luce emessa dalla prima sorgente all'infinito).

  7. Permettere all'utente di muovere la sorgente al finito (ved. punto precedente) premendo i tasti freccia (per le direzioni alto, basso, destra, sinistra) e i tasti page-up, page-down (per le direzioni avanti, indietro).

MATERIALE FORNITO

(1) Il modulo di lettura

Sono forniti i file parser.h e parser.c che leggono il file di triangoli.

Il file parser.c potete considerarlo come scatola nera (NON GUARDATELO NEMMENO!) che contiene l'implementazione di quanto dichiarato in parser.h.

Il file parser.h dichiara:

NON MODIFICATE questi due file.
Il vostro programma andra' a costituire un altro modulo, chiamiamolo xxxx.c, che conterra' in testa la linea #include "parser.h", e dovra' essere compilato linkandolo con parser.c.

Vi forniamo il Makefile adatto a questo.
Si compilera' con: make xxxx, creando l'eseguibile xxxx.

Nota bene: se il vostro programma non si chiama xxxx.c dovete editare il Makefile e sostituire xxxx con il nome vero.

(2) File di input

CONSIGLI

La modalita' "flat shading" si ottiene dando ai tre vertici del triangolo la stessa normale (direzione normale al piano del triangolo). Quella "smooth shading si ottiene dando a ciascun vertice una sua normale (media delle direzioni delle normali ai triangoli che condividono quel vertice). I valori delle normali si trovano nella struttura dati letta da file. (ved. Materiale fornito).

Usare due DISPLAY LIST per i triangoli (una in flat e una in smooth shading) e chiamarle sotto l'influsso di diverse proprieta' di materiale e trasformazioni di modellazione

Come luce all'infinito (punto 2) potete usare la GL_LIGHT0 coi parametri di default, ma METTETELA ALL'INFINITO DIETRO L'OSSERVATORE (es. in 0,0,-1 se guardate da z=-infinito) altrimenti potrebbe cadere dietro o dentro l'oggetto).

Per catturare le pressioni dei tasti ordinari in Glut usare la callback Keyboard function, per i tasti freccia e page-up page-down usare la Special key function.

Per catturare lo spostamento del mouse a bottone premuto usare Motion function.

Per semplicita', fate in modo che il vostro programma legga i triangoli da standard input, chiamando read_triangles(stdin) e poi redirezionare lo standard input da command-line.

MATERIALE DA CONSEGNARE

L'indirizzo di posta elettronica a cui spedire e' magillo@disi.unige.it. Indicare chiaramente nel messaggio il nome dei componenti del gruppo e l'elenco dei file inviati. NON reinviare i file parser.h e parser.c che fanno parte del materiale fornito.