このプログラムでは,イベントが発生したときにコールバック関数が呼び出されたことが 分かるようにしている.イベントに応じて,draw()関数とresize()関数が呼び 出される.これらの関数が呼び出されると,ターミナルにメッセージが書かれる.このメッ セージを見ると,コールバック関数が呼び出されるタイミングが分かる.
1 #include <stdio.h>
2 #include <GL/glut.h>
3
4 void draw(void); // プロトタイプ宣言
5 void resize(int w, int h);
6 void set_color(void);
7
8 //====================================================================
9 // main関数
10 //====================================================================
11 int main(int argc, char *argv[])
12 {
13 glutInitWindowPosition(100,200); // 初期位置(x,y)指定
14 glutInitWindowSize(300,500); // 初期サイズ(幅,高さ)指定
15 glutInit(&argc, argv); // GLUT 初期化
16 glutInitDisplayMode(GLUT_RGBA); // 表示モードの指定
17 glutCreateWindow("Yamamoto's window"); // windowをタイトルを付けてを開く
18 glutDisplayFunc(draw); // イベントにより呼び出し
19 glutReshapeFunc(resize); // サイズ変更のときに呼び出す関数指定
20 set_color(); // 塗りつぶす色指定
21 glutMainLoop(); // GLUTの無限ループ
22
23 return 0;
24 }
25
26 //====================================================================
27 // 図形を描く
28 //====================================================================
29 void draw(void)
30 {
31
32 printf("draw has been called.\n"); // イベント確認用(通常は不要)
33
34 glClear(GL_COLOR_BUFFER_BIT);
35
36 // ---- 三角形 ---------
37 glColor3d(0.0, 0.7, 0.0); // 線の色指定(RGB) 赤
38 glBegin(GL_TRIANGLES); // 開始 三角形
39 glVertex2d(-0.7, -0.7); // 頂点の指定
40 glVertex2d( 0.0, 0.6);
41 glVertex2d( 0.7, -0.7);
42 glEnd(); // 終了
43
44 glFlush(); // 描画
45 }
46
47 //====================================================================
48 // リサイズ
49 // この関数は window のサイズが変化したら呼び出される
50 // 引数
51 // w:ウィンドウの幅
52 // h:ウィンドウの高さ
53 //====================================================================
54 void resize(int w, int h)
55 {
56
57 // イベント確認用(通常は不要)
58 printf("resize has been called. w=%d\th=%d\n", w, h);
59
60 glLoadIdentity(); // 変換行列を単位行列に
61 gluOrtho2D(-w/200.0, w/200.0, -h/200.0, h/200.0); // world座標系の範囲
62 glViewport(0, 0, w, h); // ウィンドウ座標系を指定
63 }
64
65 //====================================================================
66 // 色の指定
67 //====================================================================
68 void set_color(void)
69 {
70 glClearColor(0.9, 1.0, 1.0, 1.0); //赤緑青と透明度
71 }
resize has been called. w=739 h=317 draw has been called. resize has been called. w=729 h=317 draw has been called. draw has been called. draw has been called.