OpenGL-Rotationen um World Origin, wenn sie um Local Origin liegen sollen

Ich implementiere ein einfaches Kamerasystem in OpenGL. Ich richte gluPerspective unter der Projektionsmatrix ein und verwende dann gluLookAt für die ModelView-Matrix. Danach habe ich meine Hauptrenderschleife, die nach Tastaturereignissen sucht und, wenn eine der Pfeiltasten gedrückt wird, die Winkel- und Vorwärtsgeschwindigkeit ändert (ich drehe nur um die y-Achse und bewege mich durch das z (vorwärts)). Dann verschiebe ich die Ansicht mit dem folgenden Code (DeltaTime ist die Zeit, die seit dem Rendern des letzten Frames vergangen ist, in Sekunden, um die Bewegung von der Framerate zu entkoppeln):

//place our camera  
newTime = RunTime(); //get the time since app start  
deltaTime = newTime - time; //get the time since the last frame was rendered  
time = newTime;  
glRotatef(view.angularSpeed*deltaTime,0,1,0); //rotate  
glTranslatef(0,0,view.forwardSpeed*deltaTime); //move forwards  
//draw our vertices  
draw();  
//swap buffers  
Swap_Buffers();  

Dann dreht sich der Code erneut. Mein Zeichenalgorithmus beginnt mit aglPushMatrix() und endet in aglPopMatrix().

Bei jedem Aufruf von glRotatef () und glTranslatef () wird die Ansicht um die Geschwindigkeit vorwärts in Blickrichtung verschoben.

Wenn ich den Code ausführe, wird mein Objekt an der richtigen Stelle gezeichnet, aber wenn ich mich bewege, erfolgt die Bewegung mit der Ausrichtung des Weltursprungs (0,0,0 - in Richtung der Z-Achse) im Gegensatz zur lokalen Ausrichtung (wo ich zeige) und wenn ich drehe, erfolgt die Drehung um (0,0,0) und nicht um die Position der Kamera.

Am Ende habe ich diesen seltsamen Effekt, dass meine Kamera umkreist (0,0,0) anstatt sich an Ort und Stelle zu drehen.

Ich rufe nicht anglLoadIdentity() überhaupt irgendwo in der Schleife, und ich bin sicher, dass der Matrix-Modus eingestellt istGL_MODELVIEW für die gesamte Schleife.

Ein weiterer merkwürdiger Effekt ist, wenn ich aglLoadIdentity() Rufen Sie in derdraw() Funktion (zwischen den PushMatrix- und PopMatrix-Aufrufen wird der Bildschirm nur schwarz und egal, wohin ich schaue, ich kann das von mir gezeichnete Objekt nicht finden.

Weiß jemand, was ich durcheinander gebracht habe, um diese Umlaufbahn (0,0,0) zu erzeugen, anstatt sie an Ort und Stelle zu drehen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage