Frage

In OpenGL Ich versuche, eine Kamera um einen Punkt zu drehen, mit Kameraabstand r von dem Punkt zu sein, und dem Punkt zugewandt ist, wenn sie sich dreht. Mit anderen Worten, ich möchte die Kamera entlang des Umfangs eines Kreises mit einem Radius r von der Mitte, mit der Kamera mit Blick auf das Zentrum an einer beliebigen Stelle entlang des Umfangs bewegen.

Hier kann sagen, dass in 3D-Raum der Mittelpunkt des Kreises (3, 0, 3);

Ich habe versucht:

// 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);

wo CameraAngle ist der Grad um den Kreis herum bewegt wird.

Ihr Endergebnis ist die Kamera immer noch entlang der Ursprung dreht, nicht der Mittelpunkt des Kreises. Kann jemand mir helfen, dieses Problem zu beheben? Dank!

War es hilfreich?

Lösung

Sie müssen entweder:

  • drehen, um die Kamera um den Ursprung und dann übersetzen sie (*)

oder:

  • Verwendung gluLookAt die Kamera zeigt in der Mitte des Kreises zu halten

(*) Rotationsfunktionen drehen normalerweise über den Ursprung. Um einen anderen Punkt zu drehen P müssen Sie:

  • translate (-P)
  • drehen
  • translate (P)

Andere Tipps

Es ist ein wenig verwirrend, aber ich denke, Sie sollten:

// 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)

beachten muss die Reihenfolge nicht geändert werden.

Warum bei all der Mühe Drehen der Kamera stören und nicht dreht die Szene selbst?
Es ist viel mehr geradlinig. nur drehen, um die Model-View-Matrix um den Ursprung. Sie werden genau das gleiche Ergebnis erhalten.

Ich finde Probleme wie diese viel einfacher, mit gluLookAt () zu lösen. Sie definieren einen Pfad für die Kamera (ein Kreis ist ganz einfach!) Und halten Sie die „Mitte“ Punkt fixiert (das heißt das, was Sie suchen auf).

Der einzig mögliche Trick ist, die ein guten up vector - aber nicht in der Regel zu viel Arbeit. Wenn der Pfad und der Zielpunkt in der gleichen Ebene liegen, können Sie den gleichen vektor jedes Mal verwenden!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top