現在地 >> メニュー >> 基本編04 >> アニメーション

次 >> ダブルバッファ

アニメーション


アニメーションは、
連続で「再描画」する
という事である。

つまり、連続的にdisplay関数を呼び出す事で実現できる。

関数を連続的に呼び出す関数


関数を連続的に呼び出す関数として
  • タイマー関数である「glutTimerFunc()」
  • CPUが暇なときによびだす「glutIdleFunc()関数」

がある。

関数の呼び出し方


display関数を呼び出す時には、
  • glutPostRedisplay()を使ってdisplay関数を呼び出す
  • display関数を直接記述する
といった方法がある。
 

[1]:タイマー関数を使う


「タイマー関数」の「引数」は次のようになっている
glutTimerFunc(ミリ秒、呼び出す関数、引数(int型));

設定方法


― コールバック関数を登録 ー
glutTimerFunc(0,timer,17);


― timer関数の定義 ―
void timer(int t)
{
display();
glutTimerFunc(t,timer,17);
}


[ 使用例 ]

void timer(int t)
{
    display();
    glutTimerFunc(t,timer,17); //タイマー関数
}

        ... ...

int main(int argc, char *argv[])
{
        ... ...

    glutTimerFunc(0,timer,17); 

        ... ...
    return 0;
}

※「タイマー関数」は、複数設定できる。


[2].Idle関数を使う


CPUが暇なときによびだす「glutIdleFunc()関数」は、

― コールバック関数の登録 ―
glutIdleFunc(idle);


― 関数の定義 ―
void idle(void)
{
  glutPostRedisplay(); //再描画 ( ※display()関数を呼び出す関数 )
}

という設定をする。

[ 使用例 ]

void idle(void)
{
    glutPostRedisplay();   //再描画( ※display()関数を呼び出す関数 )
}

... ...

int main(int argc, char *argv[])
{

... ...

    glutIdleFunc(idle); //コールバック関数の登録

... ...

}

もし、アニメーションを止めたい場合は
glutIdleFunc(NULL);
とすれば、idle関数を呼ばなくなる。



次 >> ダブルバッファ

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます