強火で進め

このブログではプログラム関連の記事を中心に書いてます。

OpenGL(GLUT)の主なコールバック関数

OpenGL(GLUT)の主に使用するコールバック関数の一覧。

定義 呼ばれるとき
glutDisplayFunc(void (*func)(void)); 描画処理が必要なとき。
glutReshapeFunc(void (*func)(int width, int height)); ウィンドウのリサイズ時。
glutKeyboardFunc(void (*func)(unsigned char key, int x, int y)); キーボードの入力があったとき。コールバック関数にはマウスカーソルの位置情報も合わせて渡される。
glutMouseFunc(void (*func)(int button, int state, int x, int y)); マウスボタンが押されたか離されたとき。
glutMotionFunc(void (*func)(int x, int y)); マウスでドラッグが行われているとき。
glutPassiveMotionFunc(void (*func)(int x, int y)); マウスカーソルが移動しているとき(※ドラッグではない事に注意。ドラッグ中は glutMotionFunc() で設定したコールバック関数が呼ばれる)。
glutEntryFunc(void (*func)(int state)); マウスカーソルがウィンドウの外に出たときとウィンドウ内に入ったとき。
glutVisibilityFunc(void (*func)(int state)); ウィンドウがアイコン化されるなど不可視になったり、その後元に戻され可視になったとき。
glutIdleFunc(void (*func)(void)); プログラムがアイドル状態になったとき。

コールバック関数の設定であるため実際は以下のように使われます。

#include <stdio.h>

/* Mac OS X */
#ifdef __APPLE__
#include <GLUT/glut.h>
#endif

/* Linux */
#ifdef linux
#include <gl/glut.h>
#endif

/* Windows */
#ifdef WIN32
#include <windows.h>
#include <gl/glut.h>
#endif

static void displayCallback(void)
{
}

void motionCallback(int x, int y)
{
	printf("motion : %d %d\n", x, y);
}

void passiveMotionCallback(int x, int y)
{
	printf("passive motion : %d %d\n", x, y);
}

int main(int argc, char* argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_RGB);
	glutInitWindowSize(400, 400);
	
	glutCreateWindow("GLUT");
	glutMotionFunc(motionCallback);
	glutPassiveMotionFunc(passiveMotionCallback);
	
	glutDisplayFunc(displayCallback);
	
	glutMainLoop();
	
	return 0;
}