このプログラムでは,イベントが発生したときにコールバック関数が呼び出されたことが 分かるようにしている.イベントに応じて,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.