Вращения OpenGL вокруг World Origin, когда они должны быть вокруг Local Origin

Я внедряю простую систему камер в OpenGL. Я установил gluPerspective в матрице проекции, а затем использую gluLookAt в матрице ModelView. После этого у меня есть основной цикл рендеринга, который проверяет события клавиатуры и, если какая-либо из клавиш со стрелками нажимается, изменяет угловую и прямую скорости (я вращаюсь только по оси y и двигаюсь по z (вперед)). Затем я перемещаю представление, используя следующий код (deltaTime - это время, прошедшее с момента отображения последнего кадра в секундах, чтобы отделить движение от частоты кадров):

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

Затем код снова зацикливается. Мой алгоритм рисования начинается сglPushMatrix() и заканчивается вglPopMatrix().

Каждый вызов glRotatef () и glTranslatef () продвигает представление вперед на скорости вперед в направлении просмотра.

Однако когда я запускаю код, мой объект рисуется в правильном месте, но когда я двигаюсь, движение выполняется с ориентацией начала координат мира (0,0,0 - по оси Z), а не с локальной ориентацией. (куда я указываю), и когда я вращаюсь, вращение происходит примерно на (0,0,0), а не на положении камеры.

Я получаю странный эффект от вращения моей камеры (0,0,0), а не вращения на месте.

Я не звонюglLoadIdentity() в любом месте внутри цикла, и я уверен, что матричный режим установлен наGL_MODELVIEW для всего цикла.

Еще один странный эффект, если я поставлюglLoadIdentity() позвоните внутрьdraw() функция (между вызовами PushMatrix и PopMatrix, экран просто становится черным, и независимо от того, куда я смотрю, я не могу найти нарисованный объект.

Кто-нибудь знает, что я испортил, чтобы сделать эту орбиту (0,0,0) вместо того, чтобы вращаться на месте?

Ответы на вопрос(3)

Ваш ответ на вопрос