Laboratorio di Interfacce Grafiche
Esercizio 4
Argomento: Display list, trasformazioni geometriche e illuminazione
in OpenGL.
Trovate il programma
cubi.c.
-
Disegna una scena composta da un insieme di parallelepipedi
ciascuno con dimensioni, posizione, orientamento e colore scelti a caso.
-
Tutti i parallelepipedi sono ottenuti chiamando un'unica
display list dopo aver assegnato diverse trasformazioni
geometriche e diversi colori.
-
La display list e' inizializzata nella funzione makeUnitCube.
E' chiamata per disegnare un parallelepipedo di dimensioni volute
nella funzione drawCuboid.
La funzione show_scene si occupa di disegnare tutti i parallelepipedi
che compongono la scena.
-
Le luci sono definite nella funzione setLights.
-
La funzione init compie tutte le inizializzazioni:
abilita le funzionalita' di OpenGL che servono (Z buffer per eliminazione
delle superfici nascoste, face culling per eliminazione delle back faces,
illuminazione e luce numero 0), e crea la display list cubo.
Provare le seguenti cose:
-
Il programma cosi' come e' adesso visualizza un diverso gruppo
di parallelepipedi casuali ogni volta che si ridisegna la finestra
(provare a coprire e scoprire la finestra per rendersene conto).
Questo perche' i valori casuali sono ricalcolati ad ogni esecuzione
della show_scene.
Per evitare questo, definire una display list che contenga tutti
i parallelepipedi. Creare questa display list una volta per tutte,
e nella show_scene semplicemente chiamarla.
-
Provare a cambiare i parametri della luce (spostare la sorgente
luminosa, cambiarne il colore...), provare a inserire un'altra luce.
-
Inserire comandi (realizzati con XForms) per controllare la posizione
della/e luce/i.
-
Rimpiazzare il gruppo di parallelepipedi random con
parallelepipedi di dimensioni e posizioni specifiche (es. a formare
un oggetto di senso compiuto).
-
Provare a ingrandire/rimpicciolire il volume di vista (agendo sui
parametri della glOrtho).
Inserire controlli XForms per questo.
-
Provare a cambiare il tipo di proiezione da parallela a prospettica.