Laboratorio di Grafica Interattiva A.A. 2003-4

Esercizio 4

Argomento

Selezione di primitive in OpenGL.

Files

Nessun file nuovo. Si parte da quelli dell'esercitazione precedente.

Esercitazione guidata

Prima tappa

Date modo all'utente di selezionare la primitiva corrente (quella su cui agiscono le operazioni di rotazione / traslazione / cambio di attributi) cliccandovi sopra con il mouse.
Per esempio usate il bottone sinistro del mouse per selezionare e il bottone destro per fare apparire il menu'.

Per selezionare la primitiva tramite click usate il selection mode di OpenGL.

Il nome (identificatore numerico) di una primitiva puo' essere per es. un numero da 1 a 5.

La funzione di disegno della work area esiste in due versioni

In pratica e' meglio avere un'unica funzione ed usare una variabile di stato per sapere in quale caso siamo. Nel secondo caso la funzione compie delle operazioni in piu'.

Dovete intervenire sulla mouse callback della work area e sulla funzione di disegno della work area.

La mouse callback:

La funzione di disegno della work area va chiamata qui con viewport coincidente con la work area, cosi' come avviene quando e' chiamata all'interno della display callback.
Non e' necessario chiamare la funzione di disegno della toolbar area perche' la selezione avviene solo nella work area.

La funzione di disegno della work area, quando chiamata in modalita' di selezione, oltre alle operazioni solite:

Le variabili che tengono il selection buffer e l'informazione se siamo in modalita' normale oppure in modalita' di selezione devono essere globali perche' sono usate sia nella mouse callback che nella funzione di disegno.
Inoltre occorre passare le le coordinate del punto cliccato dalla mouse callback alla funzione di ridisegno. Anche questo si puo' fare con variabili globali.

Quindi occorre:

Il nome della primitiva selezionata (se il click e' avvenuto su una primitiva) rimarra' nel selection buffer.

Seconda tappa

Permettere all'utente di selezionare i singoli vertici di una primitiva e di spostarli trascinandoli con il mouse.

NOTE:
Per monitorare lo spostamento del mouse (trascinamento del vertice), si usa la mouse motion callback.
Occorre cambiare veramente le coordinate del vertice nella struttura dati della primitiva.