当我按一个键时,我需要在轴上旋转场景。这是我实施它的方式
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上执行旋转时,场景的旋转不正确。也许这是因为在Y上旋转之前首先在X上执行旋转,因为函数调用中的顺序。我无法正确使用此功能,因为在我的应用程序中旋转场景的顺序非常重要。
答案 0 :(得分:1)
使用glPushMatrix()
将矩阵推送到矩阵堆栈,并使用glPopMatrix()
将其恢复回来。