亲爱的我试图通过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的增量以减慢我的动画速度。但不知怎的,我的动画一直在继续前进,直到我无法用眼睛捕捉它。有谁知道如何减慢这种动画?感谢的
答案 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)
来计算该值。