如何减慢glutIdleFunc动画速度

时间:2012-07-29 09:40:26

标签: c opengl animation

亲爱的我试图通过glutIdleFunc()使用OpenGL创建动画。以下是我的代码:

float t = 0.0;

void idle (void)
{
    t += 0.1;
    if (t > 2*pi)  
    { 
        t = 0.0; 
    }
    glutPostRedisplay();
}

//in main function
glutIdleFunc(idle);

我一直在尝试调整t的增量以减慢我的动画速度。但不知怎的,我的动画一直在继续前进,直到我无法用眼睛捕捉它。有谁知道如何减慢这种动画?感谢的

2 个答案:

答案 0 :(得分:2)

您可能最好使用C t之类的实时计时器,而不是试图找到要在空闲函数中使用的人工time()值。然后,根据自上一帧绘制以来经过的时间,将动画推进适当的数量。

以下是它的外观:

time_t lastTime;

void draw() {
  const time_t now = time();
  const double dt_s = difftime(now, lastTime);

  // Update your frame based on the elapsed time.  For example, update an angle
  // based on a specified rotation rate (omega_deg_s):
  const double omega_deg_s = 10.0;
  angle += dt_s * omega_deg_s;
  angle = fmod(angle, 360.0);

  // Now draw something based on the new angle info:
  draw_my_scene(angle);

  // Record current time for next time:
  lastTime = now;
}

答案 1 :(得分:2)

您需要使用自上次函数调用以来的时间而不是直接值作为指标,因为该时间可能会有所不同。
有关详情,请参阅valkea's answer on GameDev,这表示您使用glutGet(GLUT_ELAPSED_TIME)来计算该值。