Domanda

In OpenGL sto provando a ruotare una videocamera attorno a un punto, con la distanza della videocamera r dal punto e rivolta verso il punto quando ruota. In altre parole, voglio che la videocamera si sposti lungo la circonferenza di un cerchio a un raggio r dal centro, con la videocamera rivolta verso il centro in qualsiasi punto lungo la circonferenza.

Diciamo che nello spazio 3d il centro del cerchio è (3, 0, 3);

Ho provato:

// move to center of circle    
glTranslatef(-3, 0, -3)
// move a distance away from the circle
glTranslatef(0, 0, r);
// rotate along the y "up" axis
glRotatef(CameraAngle, 0, 1, 0);

dove CameraAngle indica i gradi che vengono spostati attorno al cerchio.

Il mio risultato finale è che la telecamera sta ancora ruotando lungo l'origine, non al centro del cerchio. Qualcuno può aiutarmi a risolvere questo problema? Grazie!

È stato utile?

Soluzione

Devi:

  • ruota la videocamera intorno all'origine e poi traducila (*)

o

  • usa gluLookAt per mantenere la fotocamera puntata al centro del cerchio
Le funzioni di rotazione

(*) normalmente ruotano attorno all'origine. Per ruotare attorno ad un altro punto P devi:

  • translate (-P)
  • Ruota
  • translate (P)

Altri suggerimenti

è un po 'confuso, ma penso che dovresti:

// move camera a distance r away from the center
glTranslatef(0, 0, -r);

// rotate 
glRotatef(angley, 0, 1, 0);
glRotatef(anglex, 1, 0, 0);

// move to center of circle    
glTranslatef(-cx, -cy, -cz)

nota che l'ordine NON deve essere modificato.

Perché preoccuparsi di tutto il problema di ruotare la telecamera e non ruotare la scena stessa?
È molto più semplice. basta ruotare la matrice modelview attorno all'origine. Otterrai lo stesso esatto risultato.

Trovo problemi come questo molto più facili da risolvere con gluLookAt (). Definisci un percorso per la telecamera (un cerchio è facile!) E mantieni il "centro" punto fisso (cioè la cosa che stai guardando).

L'unico trucco possibile è definire un buon vettore, ma di solito non troppo lavoro. Se il percorso e il punto target sono sullo stesso piano, puoi usare sempre lo stesso vettore up!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top