Rotacje OpenGL wokół początków świata, kiedy powinny być w pobliżu pochodzenia lokalnego

Implementuję prosty system kamer w OpenGL. Ustawiłem gluPerspective pod macierzą projekcji, a następnie użyłem gluLookAt na matrycy ModelView. Po tym mam moją główną pętlę renderowania, która sprawdza zdarzenia klawiatury i, jeśli którykolwiek z klawiszy strzałek jest wciśnięty, modyfikuje prędkość kątową i prędkość do przodu (obracam się tylko przez oś y i przechodzę przez z (do przodu)). Następnie przesuwam widok za pomocą następującego kodu (deltaTime to czas, który upłynął od ostatniej renderowania klatki w sekundach w celu oddzielenia ruchu od liczby klatek na sekundę):

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

Następnie kod ponownie się zapętla. Mój algorytm rysowania zaczyna się od aglPushMatrix() i kończy naglPopMatrix().

Każde wywołanie funkcji glRotatef () i glTranslatef () przesuwa widok do przodu o prędkość do przodu w kierunku widoku.

Jednak gdy uruchomię kod, mój obiekt zostanie narysowany we właściwym miejscu, ale kiedy się poruszę, ruch jest wykonywany z orientacją początku świata (0,0,0 - zwróconą wzdłuż osi Z), w przeciwieństwie do orientacji lokalnej (gdzie wskazuję), a kiedy obracam, obrót odbywa się wokół (0,0,0), a nie pozycji kamery.

Skończyło się na tym dziwnym efekcie mojego aparatu orbitującego (0,0,0) w przeciwieństwie do obracania na miejscu.

Nie dzwonięglLoadIdentity() w ogóle gdzieś w pętli i jestem pewien, że tryb Matrix jest ustawiony naGL_MODELVIEW na całą pętlę.

Innym dziwnym efektem jest umieszczenieglLoadIdentity() zadzwoń do środkadraw() Funkcja (między wywołaniami PushMatrix i PopMatrix, ekran po prostu staje się czarny i bez względu na to, gdzie patrzę, nie mogę znaleźć rysowanego obiektu).

Czy ktoś wie, co zepsułem, aby ta orbita (0,0,0) zamiast obracać się na miejscu?

questionAnswers(3)

yourAnswerToTheQuestion