Laboratorio di Grafica Interattiva A.A. 2002-3

Esercizio 6

Argomento

Selezione interattiva di oggetti in OpenGL.

Files

Nessun nuovo file, si continua da quelli dell'esercitazione precedente.

Esercitazione guidata

Prima tappa

Date modo all'utente di selezionare il solido corrente (quello su cui agiscono le operazioni di rotazione/traslazionecambio di attributi) cliccandovi sopra con il mouse.
Usate il bottone destro del mouse per selezionare e mantenete il bottone sinistro per ruotare/traslare.

Per adesso implementate la selezione tramite click solo sulla vista prospettica.

Per selezionare il solido tramite click usate il selection mode di OpenGL.

La funzione di disegno della work area prospettica 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 prospettica e sulla funzione di disegno della work area prospettica.

La mouse callback:

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

La funzione di disegno della work area prospettica, 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.

Ogni solido e' composto da varie primitive GL_POLYGON. A tutte le primitive che compongono un solido va dato lo stesso nome (identificatore numerico), che puo' essere per es. la posizione del solido nell'array di solidi.

Quindi occorre: Il nome del solido selezionato (se il click e' avvenuto su un solido) rimarra' nel selection buffer.

Compito

Implementate la selezione anche nelle tre viste ortografiche.

Evidenziate l'oggetto selezionato in modo opportuno, per esempio marcando i suoi vertici con pallini. Basta chiamare la stessa display list che disegna il solido dopo aver impostato polygon mode a GL_POINT e point size abbastanza grosso.