Modified lines:  5, 6, 23, 25, 26, 27, 28, 29, 30, 31, 32, 33, 123, 126, 134, 189, 218
Added line:  19, 20, 21, 22, 23, 24, 25, 26, 42, 43, 44, 45, 46, 47, 48, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 159, 165, 166, 167, 168, 169, 170, 173, 248, 249, 250
Removed line:  None
Generated by diff2html.pl
© Yves Bailly, MandrakeSoft S.A. 2001, Ryohei Morita 2007
diff2html.pl is licensed under the GNU GPL.

  ../106-6/106-6-ShowXYZ.c     108-1-Ortho.c
  238 lines
9084 bytes
Last modified : Mon Nov 7 11:49:06 2011

    286 lines
10979 bytes
Last modified : Sat Nov 12 18:54:57 2011

1 // Keisanki Joron 2 (Introduction to Computing II)   1 // Keisanki Joron 2 (Introduction to Computing II)
2 // Dept. of Engineering Systems, University of Tsukuba   2 // Dept. of Engineering Systems, University of Tsukuba
3 // [UTF-8 / Unix]   3 // [UTF-8 / Unix]
4   4
5 // 2011/10/31 kameda[at]iit.tsukuba.ac.jp   5 // 2011/11/07 kameda[at]iit.tsukuba.ac.jp
6 // 6.6 X,Y,Z軸を線オブジェクトとして表示   6 // 8.1 直交投影の明示
7   7
8 #include <stdio.h>   8 #include <stdio.h>
9 #include <stdlib.h> // exit()   9 #include <stdlib.h> // exit()
10 #include <GL/glut.h>   10 #include <GL/glut.h>
11   11
12 // ***********************************************************************   12 // ***********************************************************************
13 // global variables ******************************************************   13 // global variables ******************************************************
14   14
15 // +----------------------------------------------------   15 // +----------------------------------------------------
16 // Global Variables   16 // Global Variables
17 // +----------------------------------------------------   17 // +----------------------------------------------------
18   18
      19 // Windowサイズ
      20 int window_w = 400;
      21 int window_h = 400;
      22
      23 // 直交投影時のスケールファクタ [pixel / unit_of_imager]
      24 // ここでは正規化カメラの撮像面での 1.0 単位を 200画素に相当させる
      25 float ortho_unit = 200.0; 
      26
19 // ***********************************************************************    27 // *********************************************************************** 
20 // gl utilitiess *********************************************************   28 // gl utilitiess *********************************************************
21   29
22 // +----------------------------------------------------   30 // +----------------------------------------------------
23 // MODELVIEW Matrix を表示する   31 // MODELVIEW Matrix と PROJECTION を表示する
24 // +----------------------------------------------------   32 // +----------------------------------------------------
25 void ic2_ShowMODELVIEW (void) {   33 void ic2_ShowMATRIX (char *str) {
26   GLfloat mvm[16];   34   GLfloat m[16]; // GL_MODELVIEW matrix
27   35   GLfloat p[16]; // GL_PROJECTION matrix
28   glGetFloatv(GL_MODELVIEW_MATRIX, mvm); // MODELVIEWのスタックトップmatrixをmvmにコピー   36
29   printf("MODELVIEW Matrix\n");   37   glGetFloatv(GL_MODELVIEW_MATRIX , m);  // MODELVIEWのスタックトップmatrixをmにコピー
30   printf("%7.3f  %7.3f  %7.3f  %7.3f\n", mvm[ 0], mvm[ 4], mvm[ 8], mvm[12]);   38   glGetFloatv(GL_PROJECTION_MATRIX, p); // PROJECTIONのスタックトップmatrixをpにコピー
31   printf("%7.3f  %7.3f  %7.3f  %7.3f\n", mvm[ 1], mvm[ 5], mvm[ 9], mvm[13]);   39   if (str != NULL) printf("<< %s >>\n", str);
32   printf("%7.3f  %7.3f  %7.3f  %7.3f\n", mvm[ 2], mvm[ 6], mvm[10], mvm[14]);   40   printf("MODELVIEW Matrix                        PROJECTION Matrix\n");
33   printf("%7.3f  %7.3f  %7.3f  %7.3f\n", mvm[ 3], mvm[ 7], mvm[11], mvm[15]);   41   printf("%7.3f  %7.3f  %7.3f  %7.3f      %7.3f  %7.3f  %7.3f  %7.3f\n",
      42           m[ 0], m[ 4], m[ 8], m[12],     p[ 0], p[ 4], p[ 8], p[12]);
      43   printf("%7.3f  %7.3f  %7.3f  %7.3f      %7.3f  %7.3f  %7.3f  %7.3f\n", 
      44           m[ 1], m[ 5], m[ 9], m[13],     p[ 1], p[ 5], p[ 9], p[13]);
      45   printf("%7.3f  %7.3f  %7.3f  %7.3f      %7.3f  %7.3f  %7.3f  %7.3f\n", 
      46           m[ 2], m[ 6], m[10], m[14],     p[ 2], p[ 6], p[10], p[14]);
      47   printf("%7.3f  %7.3f  %7.3f  %7.3f      %7.3f  %7.3f  %7.3f  %7.3f\n", 
      48           m[ 3], m[ 7], m[11], m[15],     p[ 3], p[ 7], p[11], p[15]);
34 }   49 }
35   50
36 // ***********************************************************************    51 // *********************************************************************** 
37 // objects_embeded *******************************************************   52 // objects_embeded *******************************************************
38   53
39 // +----------------------------------------------------   54 // +----------------------------------------------------
40 // 正方形を描く   55 // 正方形を描く
41 // +----------------------------------------------------   56 // +----------------------------------------------------
42 void ic2_FigSquare (float s) {   57 void ic2_FigSquare (float s) {
43   glDisable(GL_LIGHTING);   // 光源によるシェーディングを一旦切る   58   glDisable(GL_LIGHTING);   // 光源によるシェーディングを一旦切る
44   59
45   // 正方形(Z=0の平面内、+/- 0.9)   60   // 正方形(Z=0の平面内、+/- 0.9)
46   glBegin(GL_LINE_LOOP); {   61   glBegin(GL_LINE_LOOP); {
47     glColor3f(1.0, 1.0, 1.0);   62     glColor3f(1.0, 1.0, 1.0);
48     glVertex3f(s * -1, s * -1, 0.0);   63     glVertex3f(s * -1, s * -1, 0.0);
49     glVertex3f(s * +1, s * -1, 0.0);   64     glVertex3f(s * +1, s * -1, 0.0);
50     glVertex3f(s * +1, s * +1, 0.0);   65     glVertex3f(s * +1, s * +1, 0.0);
51     glVertex3f(s * -1, s * +1, 0.0);   66     glVertex3f(s * -1, s * +1, 0.0);
52   } glEnd();   67   } glEnd();
53   68
54   // 3軸   69   // 3軸
55   glBegin(GL_LINES); {   70   glBegin(GL_LINES); {
56     glColor3f(1.0, 0.5, 0.5); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.85, 0.0,  0.0); // X (red)   71     glColor3f(1.0, 0.5, 0.5); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.85, 0.0,  0.0); // X (red)
57     glColor3f(0.5, 1.0, 0.5); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0,  0.70, 0.0); // Y (green)   72     glColor3f(0.5, 1.0, 0.5); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0,  0.70, 0.0); // Y (green)
58     glColor3f(0.5, 0.5, 1.0); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0,  0.0,  1.0); // Z (blue)   73     glColor3f(0.5, 0.5, 1.0); glVertex3f(0.0, 0.0, 0.0); glVertex3f(0.0,  0.0,  1.0); // Z (blue)
59   } glEnd();   74   } glEnd();
60   75
61   glEnable(GL_LIGHTING);   // 光源によるシェーディングを開始する   76   glEnable(GL_LIGHTING);   // 光源によるシェーディングを開始する
62 }   77 }
63   78
64 // +----------------------------------------------------   79 // +----------------------------------------------------
65 // ティーポットを描く (glutの作り付け関数の1つ)   80 // ティーポットを描く (glutの作り付け関数の1つ)
66 // +----------------------------------------------------   81 // +----------------------------------------------------
67 void ic2_FigSolidTeapot (float s) {   82 void ic2_FigSolidTeapot (float s) {
68   GLfloat obj_ref[] = {1.0, 1.0, 0.3, 1.0}; // teapotの色情報 (DIFFUSE用)   83   GLfloat obj_ref[] = {1.0, 1.0, 0.3, 1.0}; // teapotの色情報 (DIFFUSE用)
69   GLfloat obj_shn[] = {10.0};               // teapotの色情報 (SHININESS用)   84   GLfloat obj_shn[] = {10.0};               // teapotの色情報 (SHININESS用)
70   85
71   // 色の設定   86   // 色の設定
72   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, obj_ref);   87   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, obj_ref);
73   glMaterialfv(GL_FRONT, GL_SHININESS, obj_shn);   88   glMaterialfv(GL_FRONT, GL_SHININESS, obj_shn);
74   89
75   glutSolidTeapot(s);   90   glutSolidTeapot(s);
76 }   91 }
77   92
78 // ***********************************************************************    93 // *********************************************************************** 
79 // lighting **************************************************************    94 // lighting ************************************************************** 
80   95
81 // +----------------------------------------------------   96 // +----------------------------------------------------
82 // 光源を用意   97 // 光源を用意
83 // +----------------------------------------------------   98 // +----------------------------------------------------
84 //  X     Y     Z     Diff(R,G,B)   Spec(R,G,B)   99 //  X     Y     Z     Diff(R,G,B)   Spec(R,G,B)
85 //  1.0   2.0   3.0   0.2 0.2 0.2   0.4 0.4 0.4   100 //  1.0   2.0   3.0   0.2 0.2 0.2   0.4 0.4 0.4
86 // -1.0   2.0   3.0   0.4 0.4 0.4   0.4 0.4 0.4   101 // -1.0   2.0   3.0   0.4 0.4 0.4   0.4 0.4 0.4
87 //  0.0   4.0   0.0   1.0 1.0 1.0   1.0 1.0 1.0   102 //  0.0   4.0   0.0   1.0 1.0 1.0   1.0 1.0 1.0
88 void ic2_LightSetA (void) {   103 void ic2_LightSetA (void) {
89   static int initflag = 0;   104   static int initflag = 0;
90   105
91   if (initflag == 0) {   106   if (initflag == 0) {
92     glEnable(GL_DEPTH_TEST); // デプスバッファによる描画を行う   107     glEnable(GL_DEPTH_TEST); // デプスバッファによる描画を行う
93     glEnable(GL_NORMALIZE);  // 法線ベクトルを常に正規化して解釈させる   108     glEnable(GL_NORMALIZE);  // 法線ベクトルを常に正規化して解釈させる
94     glEnable(GL_LIGHTING);   // 光源によるシェーディングを開始する   109     glEnable(GL_LIGHTING);   // 光源によるシェーディングを開始する
95     glEnable(GL_LIGHT0);     // LIGHT0 を利用   110     glEnable(GL_LIGHT0);     // LIGHT0 を利用
96     glEnable(GL_LIGHT1);     // LIGHT1 を利用   111     glEnable(GL_LIGHT1);     // LIGHT1 を利用
97     glEnable(GL_LIGHT2);     // LIGHT2 を利用   112     glEnable(GL_LIGHT2);     // LIGHT2 を利用
98     initflag = 1;   113     initflag = 1;
99   }   114   }
100      115   
101   GLfloat val[4];   116   GLfloat val[4];
102   117
103   val[0] =  1.0; val[1] =  2.0; val[2] =  3.0; val[3] = 1.0; glLightfv(GL_LIGHT0, GL_POSITION, val);   118   val[0] =  1.0; val[1] =  2.0; val[2] =  3.0; val[3] = 1.0; glLightfv(GL_LIGHT0, GL_POSITION, val);
104   val[0] =  0.2; val[1] =  0.2; val[2] =  0.2; val[3] = 1.0; glLightfv(GL_LIGHT0, GL_DIFFUSE,  val);   119   val[0] =  0.2; val[1] =  0.2; val[2] =  0.2; val[3] = 1.0; glLightfv(GL_LIGHT0, GL_DIFFUSE,  val);
105   val[0] =  0.4; val[1] =  0.4; val[2] =  0.4; val[3] = 1.0; glLightfv(GL_LIGHT0, GL_SPECULAR, val);   120   val[0] =  0.4; val[1] =  0.4; val[2] =  0.4; val[3] = 1.0; glLightfv(GL_LIGHT0, GL_SPECULAR, val);
106   121
107   val[0] = -1.0; val[1] =  2.0; val[2] =  3.0; val[3] = 1.0; glLightfv(GL_LIGHT1, GL_POSITION, val);   122   val[0] = -1.0; val[1] =  2.0; val[2] =  3.0; val[3] = 1.0; glLightfv(GL_LIGHT1, GL_POSITION, val);
108   val[0] =  0.4; val[1] =  0.4; val[2] =  0.4; val[3] = 1.0; glLightfv(GL_LIGHT1, GL_DIFFUSE,  val);   123   val[0] =  0.4; val[1] =  0.4; val[2] =  0.4; val[3] = 1.0; glLightfv(GL_LIGHT1, GL_DIFFUSE,  val);
109   val[0] =  0.4; val[1] =  0.4; val[2] =  0.4; val[3] = 1.0; glLightfv(GL_LIGHT1, GL_SPECULAR, val);   124   val[0] =  0.4; val[1] =  0.4; val[2] =  0.4; val[3] = 1.0; glLightfv(GL_LIGHT1, GL_SPECULAR, val);
110   125
111   val[0] =  0.0; val[1] =  4.0; val[2] =  0.0; val[3] = 1.0; glLightfv(GL_LIGHT2, GL_POSITION, val);   126   val[0] =  0.0; val[1] =  4.0; val[2] =  0.0; val[3] = 1.0; glLightfv(GL_LIGHT2, GL_POSITION, val);
112   val[0] =  1.0; val[1] =  1.0; val[2] =  1.0; val[3] = 1.0; glLightfv(GL_LIGHT2, GL_DIFFUSE,  val);   127   val[0] =  1.0; val[1] =  1.0; val[2] =  1.0; val[3] = 1.0; glLightfv(GL_LIGHT2, GL_DIFFUSE,  val);
113   val[0] =  1.0; val[1] =  1.0; val[2] =  1.0; val[3] = 1.0; glLightfv(GL_LIGHT2, GL_SPECULAR, val);   128   val[0] =  1.0; val[1] =  1.0; val[2] =  1.0; val[3] = 1.0; glLightfv(GL_LIGHT2, GL_SPECULAR, val);
114 }   129 }
      130
      131 // *********************************************************************** 
      132 // camera work ***********************************************************
      133
      134 // +----------------------------------------------------
      135 // カメラの投影行列を設定
      136 // +----------------------------------------------------
      137 // 利用する大域変数: window_w, window_h
      138 // window_w/window_hの変化に対して、物体の見かけの大きさが変わらないように描画
      139 // → ortho_unit が重要!
      140 //
      141 void ic2_SetUpCamera_Ortho (void) {
      142   float wlimit, hlimit;
      143   wlimit = (window_w/2) / ortho_unit; 
      144   hlimit = (window_h/2) / ortho_unit; 
      145
      146   // glOrtho(左端, 右端, 下端, 上端, 近接側クリッピング面,  遠方側クリッピング面)
      147   glMatrixMode(GL_PROJECTION);
      148   glOrtho(-wlimit, wlimit, -hlimit, hlimit, -1.0, 1.0);
      149   glMatrixMode(GL_MODELVIEW);
      150 }
      151
115 // ***********************************************************************    152 // *********************************************************************** 
116 // rendering *************************************************************   153 // rendering *************************************************************
117   154
118 // +----------------------------------------------------   155 // +----------------------------------------------------
119 // スクリーンに描画する   156 // スクリーンに描画する
120 // +----------------------------------------------------   157 // +----------------------------------------------------
121 void ic2_DrawFrame (void) {   158 void ic2_DrawFrame (void) {
      159   static int initflag = 0;
122   160
123   // 以前にglClearColor()で指定した色で塗り潰す   161   // (前処理) 以前にglClearColor()で指定した色で塗り潰す
124   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    162   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
125   163
126   // ある設定の光源の用意   164   // (1) カメラの設置 [初回のみ]
      165   if (initflag == 0) {
      166     ic2_SetUpCamera_Ortho();
      167     initflag = 1;
      168   }
      169
      170   // (2) 光源の設置
127   ic2_LightSetA();   171   ic2_LightSetA();
128   172
      173   // (3) 物体の設置
129   // 物体描画:正方形   174   // 物体描画:正方形
130   ic2_FigSquare(0.9);   175   ic2_FigSquare(0.9);
131   // 物体描画:ティーポット   176   // 物体描画:ティーポット
132   ic2_FigSolidTeapot(0.5);   177   ic2_FigSolidTeapot(0.5);
133   178
134   // スクリーンの切り替え   179   // (後処理) スクリーンの切り替え
135   glutSwapBuffers();   180   glutSwapBuffers();
136   181
137 }   182 }
138   183
139 // ***********************************************************************    184 // *********************************************************************** 
140 // callbacks *************************************************************    185 // callbacks ************************************************************* 
141   186
142 // +----------------------------------------------------   187 // +----------------------------------------------------
143 // キーが何か押されたときの対策用関数    188 // キーが何か押されたときの対策用関数 
144 // +----------------------------------------------------   189 // +----------------------------------------------------
145 // glutKeyboardFunc()にて登録予定   190 // glutKeyboardFunc()にて登録予定
146 // 引数 : key ... 入力文字    191 // 引数 : key ... 入力文字 
147 // 引数 : x   ... 文字が押されたときのマウスカーソルのX位置    192 // 引数 : x   ... 文字が押されたときのマウスカーソルのX位置 
148 // 引数 : y   ... 文字が押されたときのマウスカーソルのY位置    193 // 引数 : y   ... 文字が押されたときのマウスカーソルのY位置 
149 void ic2_NormalKeyInput (unsigned char key, int x, int y) {   194 void ic2_NormalKeyInput (unsigned char key, int x, int y) {
150   float delta_t = 0.1; // [unit]   195   float delta_t = 0.1; // [unit]
151   float delta_r = 1.0; // [degree]   196   float delta_r = 1.0; // [degree]
152   197
153   switch (key) {   198   switch (key) {
154   case 'q' :   199   case 'q' :
155   case 'Q' :   200   case 'Q' :
156   case 27 : // ESCキーのこと   201   case 27 : // ESCキーのこと
157     exit (0);   202     exit (0);
158     break;   203     break;
159   204
160   // Translation -_+ : [X]h_l [Y]n_u [Z]j_k   205   // Translation -_+ : [X]h_l [Y]n_u [Z]j_k
161   case 'h': glTranslatef(delta_t * -1, 0, 0); break;   206   case 'h': glTranslatef(delta_t * -1, 0, 0); break;
162   case 'l': glTranslatef(delta_t * +1, 0, 0); break;   207   case 'l': glTranslatef(delta_t * +1, 0, 0); break;
163   case 'n': glTranslatef(0, delta_t * -1, 0); break;   208   case 'n': glTranslatef(0, delta_t * -1, 0); break;
164   case 'u': glTranslatef(0, delta_t * +1, 0); break;   209   case 'u': glTranslatef(0, delta_t * +1, 0); break;
165   case 'j': glTranslatef(0, 0, delta_t * -1); break;   210   case 'j': glTranslatef(0, 0, delta_t * -1); break;
166   case 'k': glTranslatef(0, 0, delta_t * +1); break;   211   case 'k': glTranslatef(0, 0, delta_t * +1); break;
167   212
168   // Rotation -_+ : [Y]a_f [Z]s_d [X]x_w   213   // Rotation -_+ : [Y]a_f [Z]s_d [X]x_w
169   case 'x': glRotatef(delta_r * -1, 1, 0, 0); break;   214   case 'x': glRotatef(delta_r * -1, 1, 0, 0); break;
170   case 'w': glRotatef(delta_r * +1, 1, 0, 0); break;   215   case 'w': glRotatef(delta_r * +1, 1, 0, 0); break;
171   case 'a': glRotatef(delta_r * -1, 0, 1, 0); break;   216   case 'a': glRotatef(delta_r * -1, 0, 1, 0); break;
172   case 'f': glRotatef(delta_r * +1, 0, 1, 0); break;   217   case 'f': glRotatef(delta_r * +1, 0, 1, 0); break;
173   case 's': glRotatef(delta_r * -1, 0, 0, 1); break;   218   case 's': glRotatef(delta_r * -1, 0, 0, 1); break;
174   case 'd': glRotatef(delta_r * +1, 0, 0, 1); break;   219   case 'd': glRotatef(delta_r * +1, 0, 0, 1); break;
175   220
176   // [Scale] v_b   221   // [Scale] v_b
177   case 'v': glScalef(0.95, 0.95, 0.95); break;   222   case 'v': glScalef(0.95, 0.95, 0.95); break;
178   case 'b': glScalef(1.05, 1.05, 1.05); break;   223   case 'b': glScalef(1.05, 1.05, 1.05); break;
179   224
180   // [Reset]    225   // [Reset] 
181   case 'R':    226   case 'R': 
182     glMatrixMode(GL_MODELVIEW);   227     glMatrixMode(GL_MODELVIEW);
183     glPopMatrix(); // 保護されてた第1階層に降りる   228     glPopMatrix(); // 保護されてた第1階層に降りる
184     glPushMatrix(); // 保護されてた第1階層からコピーしてスタックトップを1つ上げる   229     glPushMatrix(); // 保護されてた第1階層からコピーしてスタックトップを1つ上げる
185     break;   230     break;
186   231
187   // [Show Stacktop MODELVIEW Matrix]   232   // [Show Stacktop MODELVIEW Matrix]
188   case 'p':   233   case 'p':
189     ic2_ShowMODELVIEW();   234     ic2_ShowMATRIX("Current status");
190     break;   235     break;
191   236
192   }   237   }
193 }   238 }
194   239
195 // +----------------------------------------------------   240 // +----------------------------------------------------
196 // OpenGLとしてのWindowの初期化   241 // OpenGLとしてのWindowの初期化
197 // +----------------------------------------------------   242 // +----------------------------------------------------
198 void ic2_BootWindow (char winname[]) {   243 void ic2_BootWindow (char winname[]) {
199   244
200   // ダブルバッファ,RGB表色モード,デプスバッファ を利用   245   // ダブルバッファ,RGB表色モード,デプスバッファ を利用
201   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);    246   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 
202   247
      248   // ウィンドウの大きさ
      249   glutInitWindowSize(window_w, window_h);
      250
203   // ウィンドウを開く   251   // ウィンドウを開く
204   glutCreateWindow(winname);   252   glutCreateWindow(winname);
205   253
206   // レンダリングにはSmooth Shadingを採用   254   // レンダリングにはSmooth Shadingを採用
207   glShadeModel(GL_SMOOTH);   255   glShadeModel(GL_SMOOTH);
208   256
209   // ウィンドウ全体を書き直すときの色(ここでは黒)   257   // ウィンドウ全体を書き直すときの色(ここでは黒)
210   glClearColor(0.0, 0.0, 0.0, 0.0);   258   glClearColor(0.0, 0.0, 0.0, 0.0);
211   259
212   // 初期MODELVIEW matrixの保護   260   // 初期MODELVIEW matrixの保護
213   glMatrixMode(GL_MODELVIEW);    261   glMatrixMode(GL_MODELVIEW); 
214   glPushMatrix(); // 以後本プログラムでは GL_MODELVIEW スタックの2層目以上で作業   262   glPushMatrix(); // 以後本プログラムでは GL_MODELVIEW スタックの2層目以上で作業
215   263
216   // Callback関数を設定 (イベント処理)   264   // Callback関数を設定 (イベント処理)
217   glutIdleFunc(ic2_DrawFrame); // 暇だったらフレームを描く(よい実装ではない)   265   glutIdleFunc(ic2_DrawFrame); // 暇だったらフレームを描く(よい実装ではない)
218   glutKeyboardFunc(ic2_NormalKeyInput); // キーが押されたときの準備   266   glutKeyboardFunc(ic2_NormalKeyInput); // キーが押されたときの対策
219 }   267 }
220   268
221 // ***********************************************************************    269 // *********************************************************************** 
222 // main  *****************************************************************   270 // main  *****************************************************************
223 // +----------------------------------------------------   271 // +----------------------------------------------------
224 // Main Function   272 // Main Function
225 // +----------------------------------------------------   273 // +----------------------------------------------------
226 int main (int argc, char *argv[]) {   274 int main (int argc, char *argv[]) {
227   275
228   // glutライブラリによる引数の解釈   276   // glutライブラリによる引数の解釈
229   glutInit(&argc, argv);   277   glutInit(&argc, argv);
230   278
231   // OpenGL Window の初期化   279   // OpenGL Window の初期化
232   ic2_BootWindow(argv[0]);   280   ic2_BootWindow(argv[0]);
233   281
234   // 無限ループの開始   282   // 無限ループの開始
235   glutMainLoop();   283   glutMainLoop();
236      284   
237   return 0;   285   return 0;
238 }   286 }

Generated by kameda[at]iit.tsukuba.ac.jp