Laboratorio di Interfacce Grafiche

Esercizio 2 (OpenGL - primitive e attributi)

Punto di partenza

Partite dal programma esempio costituito dai due file: La gerarchia delle classi e':
+------------+
|   Frame    | superclasse da AWT
+------------+ 
      |
+------------+ aggiunge al frame un'area di rendering OpenGL 
|  BasicGL   | e gestisce gli eventi OpenGL (infatti implementa
+------------+ l'interfaccia di GLEventListener)
      |
+------------+ specializza la funzione di disegnamento dell'area
|  Primitiv  | OpenGL tracciando una primitiva con 16 vertici in
+------------+ cerchio
Il primo file illustra come funziona il collegamento fra Java e OpenGL, che dobbiamo ancora vedere.

Ci concentriamo quindi sul codice OpenGL. Nel secondo file il metodo display realizza il redisegnamento della finestra OpenGL ed e' qui che trova posto il codice OpenGL.

Nel nostro caso il metodo display pulisce lo schermo, assegna alcuni attributi nello stato corrente e poi traccia una primitiva utilizzando la funzione ausiliaria draw_primitive.

(1) Manipolazione del codice OpenGL

  1. Provare a cambiare il tipo di primitiva tracciata (ora GL_POINTS). Le altre possibilita' sono GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, GL_QUADS, GL_QUAD_STRIP, GL_POLYGON.

  2. Per alcune primitive la configurazione di vertici data non e' corretta. Quali sono queste primitive?
    Cercare per queste primitive una configurazione di vertici alternativa.

  3. Cambiare gli attributi che influenzano l'aspetto della primitiva: point size, line width, polygon mode, colore.

(2) Aggiunta di dispositivi di controllo nell'interfaccia

Arricchire il programma di componenti di interfaccia che permettano di:
  1. Scegliere il tipo di primitiva fra quelle possibili.

  2. Cambiare il valore degli attributi: point size, line width, polygon mode, colore.

  3. Gestire abilitazioni e disabilitazioni dei vari elementi di interfaccia. Per esempio, se stiamo visualizzando punti disabilitare la modifica di attributi che non si applicano ai punti (line width, polygon mode), ecc. A tale scopo utilizzare il metodo setEnabled(boolean) della classe Component.

  4. Gestire il colore vertice-per-vertice. Dare cioe', invece di cambiare il colore globalmente all'intera primitiva, permettere all'utente di selezionare uno dei 16 vertici e cambiare il colore solo a quel vertice.

Nota

La classe BasicGL, superclasse di Primitiv definita in BasicGL.java e' sottoclasse di Frame perche' abbiamo scelto di usare AWT. Questa scelta limita la varieta' di componenti che si possono usare per svolgere la parte (2) dell'esercizio.
Non e' difficile trascrivere la classe BasicGL usando Swing (facendola sottoclasse JFrame). Questa modifica consente l'uso di tutti i tipi di componenti disponibili in Swing.