Secondo progetto di Grafica Interattiva A.A. 2003-4

Grafica tridimensionale

Vedere anche il testo del progetto.

Questo documento e' in evoluzione, raccogliero' qui le risposte alle questioni che solleverete, se saranno di interesse generale.
Ultimo aggiornamento: 22/12/03

Suggerimenti

Gestione di piu' grafici (struttura dati)

[ultimo aggiornamento: 17/12/03]

Piu' grafici (funzioni) possono essere presenti contemporaneamente con possibilita' di inserirne ed eliminarne a run-time.

Potete prevedere un massimo di 5 grafici (funzioni) che possono essere presenti contemporaneamente. Potete usare:

Quando l'utente sceglie di eliminare il grafico correntemente selezionato (menu' file), si elimina la sua funzione dall'array di funzioni. La posizione corrispondente (che puo' essere una qualsiasi) viene marcata vuota nell'array di 0/1.
Quando l'utente sceglie di inserire un nuovo grafico (menu' file), si cerca nell'array di 0/1 la prima posizione marcata vuota, e si mette la nuova funzione alla stessa posizione nell'array di funzioni.

In questo modo, per tutto il tempo in cui una funzione permane nell'ambiente di lavoro, conserva sempre lo stesso numero.

Se scegliamo di mostrare nel menu' selezione solo i numeri di posizione contenenti una funzione (valore 1 dell'array di 0/1), allora ogni volta che inseriamo o eliminiamo una funzione dobbiamo aggiornare il menu'.

Gestione di piu' grafici (visualizzazione)

[ultimo aggiornamento: 17/12/03]

La scena comprende i grafici di tutte le funzioni presenti. Bisogna che il volume di vista sia abbastanza esteso per comprendeli tutti. Si puo' fare l'unione di tutti i volumi dei grafici presenti, ma questo causa problemi per il fatto che possiamo inserire ed eliminare funzioni a run-time. Allora scegliamo inizialmente un dominio di default ragionevole e poi lasciamo all'utente l'iniziativa di collocare il grafico (mediante traslazioni e scalature) dentro al volume di vista se cade fuori. Per questo e' stato chiesto di mostrare in area messaggi le coordinate estreme un grafico appena inserito / selezionato.

Colori dei grafici

[ultimo aggiornamento: 17/12/03]

Per poter dare colori diversi al sopra e al sotto del grafico occorre abilitare in OpenGL i calcoli di illuminazione su due lati (two side). Per questo si usa (prima di disegnare) glLigthModeli(GL_LIGHT_MODEL_TWO_SIDE, 1);.

Notazione per il colore

[ultimo aggiornamento: 17/12/03]

Per specificare da tastiera un colore in formato RGB si puo' adottare la notazione XXYYZZ che usa due cifre esadecimali per ogni componente (XX=rosso, YY=verde, ZZ=blu). Il minimo e' 00 e massimo e' FF (255). Es. FF0000 = rosso, 00DD90 = verde mare...

Supponiamo di avere letto il colore in una stringa di 6 caratteri s[0...5]. Esempio di decodifica del rosso, le cui cifre sono contenute in s[0] e s[1]: rosso = char_to_int(s[0])*16 + char_to_int(s[1]), dove char_to_int(char c) va definita come una funzione che ritorna (int)c - (int)('0').

Visualizzazione del punto di vista

[ultimo aggiornamento: 22/12/03]

Nel testo si chiede di disegnare, nella vista in pianta, il punto di vista usato nella vista prospettica.

Nella vista prospettica il punto di vista gira intorno alla scena controllato da due angoli. Siano essi ANG1 = angolo di rotazione attorno all'asse z e ANG2 = angolo di rotazione attorno all'asse x come viene a trovarsi dopo aver eseguito la prima rotazione.

Allora le coordinate del punto di vista nel sistema di riferimento originario sono:

dove r e' la distanza del punto di vista dal centro della scena

Scelta delle funzioni matematiche

[ultimo aggiornamento: 22/12/03]

Quando si dice che l'utente puo' scegliere la funzione matematica NON significa che l'utente digita l'espressione aritmetica e il vostro programma deve farne il parsing!
E' sufficiente che mettiate la scelta fra due o tre funzioni la cui espressione e' predefinita e, per esempio, puo' apparire direttamente come voce di un menu'.