Proiezioni e Punti di Vista in OpenGL

Se diversamente scelto il punto di vista di una scena si trova all’origine ed è rivolto verso la parte negativa dell’asse z. Per spostare lo sguardo dobbiamo utilizzare una funzione:

gluLookAt(eyex, eyey, eyez, x, y, z, upx, upy, upz)

i paramentri riguardano: la posizione del nostro occhio ( eye ), il punto che stiamo fissando ed il vettore up, quest’ultimo argomento non è altro che l’inclinazione dell’occhio rispetto al punto osservato. Se si vuole evitare dei calcoli, possiamo dire che di norma nell’essere umano questo vettore sia (0, 1, 0 ).
I punti tridimensionali della nostra scena vengono proiettati sullo schermo solo se fanno parte del volume di vista, che compete a noi scegliere. In OpenGL ci sono due tipi di volumi di vista: il primo è un parallelepipedo definito da glOrtho, il secondo è un tronco di piramide che otteniamo utilizzando glPerspective.

Proiezioni in OpenGL

I due tipi di proiezione in OpenGL

Un volume di vista piramidale è molto simile a quello dell’occhio umano, gli oggetti vicini saranno più grandi di quelli lontani e le linee convergeranno all’orizzonte. La proiezione prospettica è più indicata per scene realistiche, mentre per i disegni tecnici è bene utilizzare la proiezione ortogonale. Vediamo nel dettaglio le due funzioni:

  • glOrtho(left, right, bottom, top, near, far) – I primi quattro parametri ci permettono di inserire i lati del volume, gli ultimi due l’estensione lungo la linea di vista.
  • glPerspective(fov, p, near, far) – Il primo parametro è l’angolo della visuale ( un occhio umano normale vede 70° ), il secondo è il rapporto tra larghezza ed altezza della finestra e gli ultimi due indicano da dove e fino a dove si estenderà il volume di vista.

Abusare dell’angolo di vista prospettica per catturare maggiori oggetti può portare a deformare l’immagine e lo stesso si ha stiracchiando più o meno la scena, quindi occorre pensare a cosa sia visibile e farsi due calcoli per ottenere i parametri più sensatamente possibile.
Come ultima informazione che voglio darvi è il punto del programma in cui queste funzioni andranno inserite. Per quanto riguarda le funzioni di proiezione il punto migliore è il resize della finestra, perché è, proprio in questo punto che conosciamo le effettive dimensioni della finestra stessa. Per quanto riguarda glLookAt il punto migliore di cambiare punto di vista è senza dubbio la funzione di disegno, ma preoccupandosi di salvare la matrice con glPushMatrix in modo che non vadano perse le informazioni e procurare una possibile invisibilità degli oggetti nella scena.

<< Lezione Precedente – Lezione Successiva >>

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in Grafica, Programmazione e contrassegnata con . Contrassegna il permalink.