1

亲爱的,我正在尝试使用 OpenGL 通过glutIdleFunc(). 下面是我的代码:

float t = 0.0;

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

//in main function
glutIdleFunc(idle);

我一直在尝试调整 t 的增量以减慢我的动画速度。但不知何故,我的动画一直移动得太快,直到我无法用眼睛捕捉到它。有谁知道如何减慢这种动画的速度?谢谢

4

2 回答 2

2

与其尝试t在空闲函数中使用人为的值,不如使用真正的计时器(例如 C's )可能会更好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;
}
于 2012-07-29T11:33:28.723 回答
2

您需要使用自上次函数调用以来的时间而不是直接值作为指标,因为该时间可能会有所不同。
有关更多信息,请阅读valkea 在 GameDev 上的回答,它建议您使用glutGet(GLUT_ELAPSED_TIME)来计算该值。

于 2012-07-29T11:39:02.383 回答