Proiezioni e Punti di Vista in OpenGL

Dopo aver costruito una bella scena vogliamo poter entrare in essa modificando le proiezioni ed i punti di vista di osservazione, in questa lezione studieremo tutto questo attraverso delle semplici funzioni di 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 >>

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

Modifica preferenze cookie