Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何制作OpenGl(GLUT)旋转动画?_Opengl_Rotation_Glut - Fatal编程技术网

如何制作OpenGl(GLUT)旋转动画?

如何制作OpenGl(GLUT)旋转动画?,opengl,rotation,glut,Opengl,Rotation,Glut,我做了一个运动场,它可以旋转180度。 不幸的是,你看不到它如何变得越来越慢。 我只看到最后的“扭转” /** @简短的旋转游戏场180度与转弯动画 */ 无效FlipGamefield 180度(){ 对于(int i=0;i

我做了一个运动场,它可以旋转180度。 不幸的是,你看不到它如何变得越来越慢。 我只看到最后的“扭转”

/**
@简短的旋转游戏场180度与转弯动画
*/
无效FlipGamefield 180度(){
对于(int i=0;i<180;i++){
glRotatef(1,0,1,0);
再发现();
睡眠(20);
}
}
作废显示(作废)
{
//Löscht den Bildschirm
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
//泽钦法布·塞岑
GL3F(1.0,1.0,1.0);
glLoadIdentity();
//你是卡米拉吗?你是奥本吗?
gluLookAt(0.0,0.0,10,0.0,0.0,0.0,0.0,1.0,0.0);
//旋转X-Achse
旋转(0);
//旋转Y-Achse
旋转式(1);
//旋转Z-Achse
旋转式(2);
如果(180度){
FlipGameField180度();
}
/*glRotatef(15,0,1,0);
glRotatef(-15,1,0,0);
*/
glTranslatef(-5.5,-6,0);
glPushMatrix();
drawGameField(假,10);
glPopMatrix();
glPushMatrix();
glTranslatef(11,0,0);
glPushMatrix();
drawGameField(正确,10);
glPopMatrix();
glPopMatrix();
//drawShipOnField(s1,费尔德斯皮尔);
drawShipOnField(s1,费尔德斯皮尔);
//glDisable(GLU照明);
/*gl3f(0,0,1);
立体立方体(1);
glEnable(德国劳埃德大学照明)*/
/*glTranslatef(5,0,0);
drawGameField(正确,10)*/
//茶壶(1.0);
//glRotatef(30,1.0,0.0,0.0);
glFlush();
}
glRotatef(1,0,1,0)我假设这是一个打字错误,应该在某个地方有一个
I

对glRotate()的调用被显示代码的一部分重置-openGL是一个状态机,每次更改任何内容时,它都会“粘住”,直到其他内容发生更改

最好在绘图例程中更新一个角度变量

glRotatef(1,0,1,0)我假设这是一个打字错误,应该在某个地方有一个
I

对glRotate()的调用被显示代码的一部分重置-openGL是一个状态机,每次更改任何内容时,它都会“粘住”,直到其他内容发生更改

最好在绘制例程中更新角度变量

void FlipGamefield 180度(){
对于(int i=0;i<180;i++){
glRotatef(1,0,1,0);
再发现();
睡眠(20);
}
}
问题1:glutPostRedisplay()只对显示事件进行排队,实际上不执行绘图。解决方案:使用一个空闲函数不断调用GLUTPOSTRESDISPLAY(如果动画正在运行),并使用系统时间来制作动画

问题2:OpenGL是一个状态完整的绘图API,而不是场景图。循环中的一个glRotate不会进入绘图状态,因为您从glLoadIdentity开始(好)。因此,改为设置一个变量,并将该旋转放到绘图路径中

void FlipGamefield 180度(){
对于(int i=0;i<180;i++){
glRotatef(1,0,1,0);
再发现();
睡眠(20);
}
}
问题1:glutPostRedisplay()只对显示事件进行排队,实际上不执行绘图。解决方案:使用一个空闲函数不断调用GLUTPOSTRESDISPLAY(如果动画正在运行),并使用系统时间来制作动画


问题2:OpenGL是一个状态完整的绘图API,而不是场景图。循环中的一个glRotate不会进入绘图状态,因为您从glLoadIdentity开始(好)。因此,改为设置一个变量,并将该旋转放到绘图路径中。

是的,这是可行的。谢谢:)我怎么能给你一颗星星或类似的东西?是的,那很有效。谢谢:)我怎样才能给你一颗星星或类似的东西?现在我有另一个问题了。我只能使用旋转动画1x。void flipGamefield180degree(){如果(flipangle<180){现在我有另一个问题了。我只能使用旋转动画1x。void flipGamefield180degree(){如果(flipangle<180){这是一个类似的问题,它对我有效,对我也有效
/**
@brief Rotates the Gamefield 180° with an turn animaion
*/
void flipGamefield180degree (){
        for (int i = 0; i < 180; i++){
            glRotatef(1, 0, 1, 0);
            glutPostRedisplay();
            Sleep(20);
        }
}


void display(void)
{

    // Löscht den Bildschirm
   glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

   // Zeichenfarbe setzen  
   glColor3f (1.0, 1.0, 1.0);
   glLoadIdentity ();             

   // _,_,_ wo steht die Kamera, _,_,_ wo hin, wo ist oben?
   gluLookAt (0.0, 0.0, 10, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);


   // Rotation X-Achse
   rotating(0);
   // Rotation Y-Achse
   rotating(1);
   // Rotation Z-Achse
   rotating(2);

   if (flip180degree){
       flipGamefield180degree();
   }

   /*glRotatef(15,0,1,0);
   glRotatef(-15,1,0,0);
   */

   glTranslatef(-5.5, -6 ,0);
   glPushMatrix();
   drawGameField(false, 10);
   glPopMatrix();

   glPushMatrix();
   glTranslatef(11, 0 ,0);
   glPushMatrix();
   drawGameField(true, 10);
   glPopMatrix();
   glPopMatrix();

   //drawShipOnField(s1, feldSpieler);
   drawShipOnField(s1, feldSpieler);

   //glDisable(GL_LIGHTING);
   /*glColor3f(0, 0, 1); 
   glutSolidCube(1);
   glEnable(GL_LIGHTING);*/
  /* glTranslatef(5, 0, 0);
   drawGameField(true, 10);*/
   //glutSolidTeapot(1.0);


   //glRotatef(30,1.0,0.0,0.0);






   glFlush ();
}
void flipGamefield180degree (){
    for (int i = 0; i < 180; i++){
        glRotatef(1, 0, 1, 0);
        glutPostRedisplay();
        Sleep(20);
    }
}