Si ottengono applicando una serie di comandi glTranslate, glRotate (che rappresentano la posizione e l'orientamento della videocamera) prima di disegnare la scena. (tecnicamente, stai ruotando l'intera scena!)
Ci sono funzioni di utilità come gluLookAt che riassumono alcuni dettagli a riguardo.
Per semplificare le cose, si supponga di avere due vettori che rappresentano la fotocamera: posizione e direzione.
gluLookAt prende la posizione, la destinazione e il vettore.
Se si implementa una classe vettoriale, destinaion = position + direction
dovrebbe fornire un punto di destinazione.
di nuovo a fare le cose semplici, si può assumere il vettore fino ad essere sempre (0,1,0)
Poi, prima del rendering qualsiasi cosa nella vostra scena, caricare la matrice identità e chiamare gluLookAt
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(source.x, source.y, source.z, destination.x, destination.y, destination.z, 0, 1, 0);
Quindi inizia a disegnare gli oggetti
È possibile lasciare l'intervallo dell'utente modificando leggermente la posizione verso destra o verso sinistra. La rotazione è un po 'più complicata in quanto devi ruotare il vettore di direzione. Supponendo che ciò che stai ruotando sia la fotocamera, non qualche oggetto nella scena.
Un problema è, se si ha solo un vettore di direzione "avanti" come lo si sposta? dov'è la destra e la sinistra?
Il mio approccio in questo caso è quello di prendere solo il prodotto incrociato di "direzione" e (0,1,0).
Ora è possibile spostare la telecamera verso sinistra e verso destra utilizzando qualcosa di simile:
position = position + right * amount; //amount < 0 moves to the left
si può andare avanti con il "vettore di direzione", ma IMO è meglio limitare il movimento ad un piano orizzontale , in modo da ottenere il vettore in avanti allo stesso modo abbiamo ottenuto il giusto vettore:
forward = cross(up, right)
Per essere onesti, questo è un po 'un approccio hacker.
L'approccio corretto consiste nell'utilizzare una struttura dati più "sofisticata" per rappresentare l'"orientamento" della telecamera, non solo la direzione in avanti. Tuttavia, dal momento che sei appena agli inizi, è bene fare le cose un passo alla volta.
Aggiungo che in nessun momento la "vista" (come impostata su glViewport) entra in questo processo. Il viewport determina in quale area della finestra verrà visualizzato il rendering (in realtà non è vero, ma pensaci in questo modo per ora) e di solito si estenderà all'intera finestra. – Thomas