Мне нужно повернуть сцену по оси, когда я нажимаю клавишу. Вот как я это реализовал
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;
и настройте мою вращающуюся сцену на
void rotateScene(){
glRotatef(angleX,1,0,0);
glRotatef(angleY,0,1,0);
}
Все идет хорошо, когда я выполняю вращение на отдельной оси, однако, когда я сначала поворачиваюсь по Y, а затем выполняю вращение по X, вращение сцены неверно. Возможно, это связано с тем, что opengl выполнял вращение по X сначала, а затем по Y из-за упорядочения в вызове функции. Я не могу использовать эту функцию должным образом, так как порядок поворота сцены важен для моего приложения.