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) )
--> マウスカーソルが移動しているとき (ドラッグではないことに注意)

glutEntryFunc( void (*func)(int state) )
--> マウスカーソルがウィンドウの外に出たときとウィンドウ内に入ったとき

glutVisibilityFunc( void (*func)(int state) )
--> ウィンドウがアイコン化されるなど不可視になったり,
その後元に戻され可視になったとき

glutIdleFunc( void (*func)(void) )
--> プログラムがアイドル状態になったとき

コールバック関数の具体的な実装

callback.c

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*
  Compile:
  gcc -Wall -O2 -o callback callback.c -framework OpenGL -framework GLUT
*/

#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;
}

[cactus:~/code_c/opengl/kumamoto]% ./callback

_images/callback.png