2012-07-29 143 views
1

亲爱的我想用OpenGL通过glutIdleFunc()创建动画。以下是我的代码:如何减慢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的增量,以减慢我的动画。但不知何故,我的动画继续前进得太快,直到我无法用眼睛看到它。有谁知道如何减慢这种动画?感谢的

回答

2

与其试图找到一个虚拟的t值用于您的空闲功能,您可能会更好使用实时定时器,如C的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; 
} 
+0

你能告诉我一个简单的例子吗? – rofans91 2012-07-29 11:35:54

+0

@rofansmanao:当然。刚刚添加了一个。关键是使用费率信息,而不仅仅是绝对增量值。 – 2012-07-29 12:14:40

+0

GLUT有自己的时间获得功能,工作得很好。 – 2012-07-29 21:03:48

2

您需要使用自上次函数调用而不是直接值作为你的指标,因为时间可能有所不同。
欲了解更多信息,请阅读valkea's answer on GameDev,这表明您使用glutGet(GLUT_ELAPSED_TIME)来计算该值。