コールバック(Callback)関数

・ループ状態時に特定のイベント(マウスボタンのクリックなど)が発生すると呼び出される関数。
・但し、アイドルコールバック(Idle Callback)関数はループ毎に必ず呼び出される。←アニメーションに利用。

ループ

glutMainLoop(void)によりループ状態に入る。
・ループ状態時はイベント待ち状態となる。
・イベントが発生するとそのイベントに対応するコールバック関数が呼び出される。
・呼び出されたコールバック関数の処理が終了するとループ状態に戻る。

描画コールバック

glutDisplayFunc(void (*func)(void))で指定されるコールバック。
・ウインドウ生成時やglutPostRedisplay()による実行要求が記録されているときに呼び出される。
・必ずしもループ毎に呼び出されるわけではない。

描画コールバックの実行要求

glutPostRedisplay(void)は描画コールバック関数を呼び出すようマーキングする。
・しかし、マーキングされた時点では描画コールバックは実行されない。
・マーキングされているとループ時に描画コールバックが1回実行され、マークは消される。
・直接、描画コールバック関数を呼び出すのではなくglutPostRedisplay()の使用で無駄な再描画を防ぐことができる。


アイドルコールバック

glutIdleFunc(void(*func)(void))で指定されるコールバック。
・ループ状態時に何もイベントが発生しなくともループ毎に必ず呼び出される。

マウスコールバック

glutMouseFunc(void(*func)(int button, int state, int x, int y))で指定されるコールバック。
・ループ状態時にマウスボタンを操作したときに呼び出される。
・マウスコールバック関数には操作されたボタン、ボタンの状態、ボタンを操作したときのマウスの座標(ウインドウ座標)が引数として渡される。

キーボードコールバック

glutKeyboardFunc(void(*func)(unsigned char key, int x, int y))で指定されるコールバック。
・ループ状態時にキーボード入力があったときに呼び出される。
・キーボードコールバック関数には入力されたキーのASCII文字、キー入力されたときのマウスの座標(ウインドウ座標)が引数として渡される。

モーションコールバック

glutMotionFunc(void(*func)(int x, int y))で指定されるコールバック。
・ループ状態時にマウスボタンをプレスしているときに呼び出される。
・マウスコールバックはボタンを押したとき、あるいは離したときにしか呼び出されない。
・モーションコールバック関数にはその時のマウスの座標(ウインドウ座標)が引数として渡される。

リシェイプコールバック

glutReshapeFunc(void(*func)(int width, int height))で 指定されるコールバック。
・ループ状態時にウインドウのサイズ変更や移動が行われたときに呼び出される。
・リシェイプコールバック関数には変更後のウインドウの幅と高さが引数として渡される。

(直投影に於ける)描画範囲の指定

・2次元の場合:gluOrtho2D(double left, double right, double bottom, double top)で指定する。
・3次元の場合:glOrtho(double left, double right, double bottom, double top, double znear, double zfar)で指定する。