| |
|
Trasformazione |
|
|
|
- Trasformazione di proiezione Stabilisce quale parte della scena viene inquadrata per produrre l'immagine (volume di vista). In OpenGL e' gestita da una matrice 4x4 chiamata projection matrix.
- La trasformazione di default, rappresentata dalla matrice identita', corrisponde ad una proiezione ortografica che ha come volume di vista il cubo con diagonale (-1,-1,-1)-(1,1,1). glMatrixMode(GL_PROJECTION);
glLoadIdentity();
- Trasformazione di vista Stabilisce la posizione del punto di vista da cui guardiamo la scena. In OpenGL e' gestita da una matrice 4x4 chiamata modelview. La trasformazione di default, rappresentata dalla matrice identita', mette il punto di vista in (0,0,0) e rivolto verso la direzione negativa dell'asse z. glMatrixMode(GL_MODELVIEW);glLoadIdentity(); Notare che, nel caso di trasformazioni di proiezione e di vista di default, il punto di vista sta al centro del volume di vista, cioe' una parte della scena inquadrata rimane dietro le spalle dell'osservatore. Questo e' permesso in proiezione ortografica: di fatto, non importa dove sta il punto di vista, la scena e' comunque proiettata con raggi visuali paralleli tra loro. Diverso sarebbe se la proiezione fosse prospettica.
|
|
|
Un po di codice : |
|
|
|
else if (control == CAM_RES) {// camera reset glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(-0.40, 1.80, -6.0);
}
else if (control == CAM_1) {
// camera 1
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 1.0, 1.0, 0.0, 0.0, 5.0, 0.0, 3.0, 5.0);
}
|
|
|
Camera come una vista: |
|
|
|
Per spostare lo sguardo ci viene in aiuto la funzione gluLookAt(eyex, eyex, eyez, x, y, z, upx, upy, upz): i molti parametri ci permettono di controllare la posizione in cui è posto il nostro "occhio" (eyex, eyey, eyez), il punto che stiamo fissando (x, y, z) e il vettore up .La funzione di questo vettore non è fra le più immediate: a prima vista le informazioni sulla posizione dell'occhio e del bersaglio sembrerebbero sufficienti ai nostri scopi. Provate però a guardare un oggetto di fronte a voi: in questo modo avete stabilito la posizione del vostro occhio e del vostro bersaglio; provate ora ad inclinare la testa da un lato, le posizioni dell'occhio e del bersaglio non sono cambiate ma ciò che vedete è diverso. Cosa è cambiato? E' cambiata l'inclinazione dell'occhio rispetto all'asse occhio-bersaglio. Il vettore up ha lo scopo di specificare questa inclinazione. Per esempio, se guardassimo di fronte a noi, un vettore up [0, 1, 0] indicherebbe la testa dritta, [1, 1, 0] la testa inclinata a destra..La caratteristica di questo vettore è che dovrebbe essere sempre perpendicolare all'asse occhio-bersaglio; di certo calcolarsi ad ogni movimento del punto di vista un nuovo vettore up può essere noioso (e richiedere alcuni calcoli). |
|
|
Due punti di vista |
|
|
|
|
|
|
|
|