Мне нужно повернуть сцену по оси, когда я нажимаю клавишу. Вот как я это реализовал
int rotateFlag;
void rotateScene(int x){
if(x)//rotate 45 deg on x axis
glRotatef(45,1,0,0);
else // roatate 45 deg on y axis
glRotatef(45,0,1,0);
}
//this is the function I call in glutDisplayFunc
void drawScene(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//I'm looking at the origin (center of my scene)
gluLookAt (x, y, z, 0,0,0, 0.0, 1.0, 0.0);
rotateScene(rotateFlag);
drawObjects();//draw Objects in Scene
}
Я присваиваю значение rotateFlag, когда нажимаю левую клавишу или клавишу вверх. Он поворачивает сцену только один раз, так как моя функция rotateScene всегда применяет glRotatef к исходному расположению сцены, чего мне следует избегать. Кто-нибудь знает, как я могу сохранить повернутую сцену, чтобы я мог применить к ней свою функцию (повернутую сцену) и поворачивать сцену каждый раз, когда я нажимаю клавишу со стрелкой? Надеюсь, я ясно выразился.
Я попробовал другое решение, увеличив угол по осям X и Y при нажатии клавиши
If keypress left
angleX+=45;
else if keypress up
angleY+=45;
и настройте мой rotateScene на
void rotateScene(){
glRotatef(angleX,1,0,0);
glRotatef(angleY,0,1,0);
}
Все идет правильно, когда я выполняю вращение по отдельной оси, однако, когда я сначала выполняю вращение по Y, а затем выполняю вращение по X, вращение сцены неверно. Возможно, это связано с тем, что opengl сначала выполнял вращение по X, а затем вращение по Y из-за порядка в вызове функции. Я не могу правильно использовать эту функцию, так как в моем приложении важен порядок поворота сцены.