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

時間は変動する可能性があるため、メトリックとして直接値ではなく、最後の関数呼び出しからの時間を使用する必要があります。
詳細については、GameDev に関する valkea の回答を参照glutGet(GLUT_ELAPSED_TIME)してください。これは、その値の計算にを使用することを示唆しています。

于 2012-07-29T11:39:02.383 に答える
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;
}
于 2012-07-29T11:33:28.723 に答える