Вращения 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) вместо того, чтобы вращаться на месте?