Modified lines:  7
Added line:  None
Removed line:  114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125
Generated by UTF-8 version of diff2html.pl
© Yves Bailly, MandrakeSoft S.A. 2001, Ryohei Morita 2007
diff2html.pl is licensed under the GNU GPL.

  ../06-06/06-06-LogoOpenGL.c     06-09-LogoOpenGL.c
  186 lines
6883 bytes
Last modified : Wed Dec 14 04:36:00 2011

    174 lines
6508 bytes
Last modified : Wed Dec 14 04:50:16 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 // 計算機序論2・実習 (筑波大学工学システム学類)   4 // 計算機序論2・実習 (筑波大学工学システム学類)
5   5
6 // 2011/12/14a kameda[at]iit.tsukuba.ac.jp   6 // 2011/12/14a kameda[at]iit.tsukuba.ac.jp
7 // 06.06. はじめてのOpenGL - 線画物体を描画 -   7 // 06.09. はじめてのOpenGL - コードクリーニング -
8   8
9 #include <stdio.h> // printf()   9 #include <stdio.h> // printf()
10 #include <GL/glut.h> // gl*(), glut*()   10 #include <GL/glut.h> // gl*(), glut*()
11   11
12 // +----------------------------------------------------   12 // +----------------------------------------------------
13 // OpenGL Logoを描く   13 // OpenGL Logoを描く
14 // +----------------------------------------------------   14 // +----------------------------------------------------
15 // s はスケーリングファクタ(s=1.0 で 概ね -1.0 〜 1.0 の大きさ)   15 // s はスケーリングファクタ(s=1.0 で 概ね -1.0 〜 1.0 の大きさ)
16 void ic2_OpenGLLogo (float s) {   16 void ic2_OpenGLLogo (float s) {
17 // 光源によるシェーディング効果を切る(と色の指定が直接色になる)   17 // 光源によるシェーディング効果を切る(と色の指定が直接色になる)
18   glDisable(GL_LIGHTING);      18   glDisable(GL_LIGHTING);   
19   19
20   // 線の幅(画素単位)   20   // 線の幅(画素単位)
21   glLineWidth(1.0);   21   glLineWidth(1.0);
22   22
23   // (R, G, B) 値域は 0.0 - 1.0   23   // (R, G, B) 値域は 0.0 - 1.0
24   glColor3f(1.0, 1.0, 1.0);   24   glColor3f(1.0, 1.0, 1.0);
25   25
26   // glBegin(GL_LINES); から glEnd(); までの間は、   26   // glBegin(GL_LINES); から glEnd(); までの間は、
27   // 「始点・終点」ごとに線分が描画される   27   // 「始点・終点」ごとに線分が描画される
28   glBegin(GL_LINES);    28   glBegin(GL_LINES); 
29   glVertex3f(s * -0.8, s *  0.8, 0.0); glVertex3f(s * -0.8, s *  0.2, 0.0); // O   29   glVertex3f(s * -0.8, s *  0.8, 0.0); glVertex3f(s * -0.8, s *  0.2, 0.0); // O
30   glVertex3f(s * -0.8, s *  0.2, 0.0); glVertex3f(s * -0.4, s *  0.2, 0.0); // O   30   glVertex3f(s * -0.8, s *  0.2, 0.0); glVertex3f(s * -0.4, s *  0.2, 0.0); // O
31   glVertex3f(s * -0.4, s *  0.2, 0.0); glVertex3f(s * -0.4, s *  0.8, 0.0); // O   31   glVertex3f(s * -0.4, s *  0.2, 0.0); glVertex3f(s * -0.4, s *  0.8, 0.0); // O
32   glVertex3f(s * -0.4, s *  0.8, 0.0); glVertex3f(s * -0.8, s *  0.8, 0.0); // O   32   glVertex3f(s * -0.4, s *  0.8, 0.0); glVertex3f(s * -0.8, s *  0.8, 0.0); // O
33   33
34   glVertex3f(s * -0.2, s *  0.6, 0.0); glVertex3f(s * -0.2, s *  0.0, 0.0); // p   34   glVertex3f(s * -0.2, s *  0.6, 0.0); glVertex3f(s * -0.2, s *  0.0, 0.0); // p
35   glVertex3f(s * -0.2, s *  0.6, 0.0); glVertex3f(s *  0.0, s *  0.6, 0.0); // p   35   glVertex3f(s * -0.2, s *  0.6, 0.0); glVertex3f(s *  0.0, s *  0.6, 0.0); // p
36   glVertex3f(s *  0.0, s *  0.6, 0.0); glVertex3f(s *  0.0, s *  0.2, 0.0); // p   36   glVertex3f(s *  0.0, s *  0.6, 0.0); glVertex3f(s *  0.0, s *  0.2, 0.0); // p
37   glVertex3f(s *  0.0, s *  0.2, 0.0); glVertex3f(s * -0.2, s *  0.2, 0.0); // p   37   glVertex3f(s *  0.0, s *  0.2, 0.0); glVertex3f(s * -0.2, s *  0.2, 0.0); // p
38   38
39   glVertex3f(s *  0.2, s *  0.4, 0.0); glVertex3f(s *  0.4, s *  0.4, 0.0); // e   39   glVertex3f(s *  0.2, s *  0.4, 0.0); glVertex3f(s *  0.4, s *  0.4, 0.0); // e
40   glVertex3f(s *  0.4, s *  0.4, 0.0); glVertex3f(s *  0.4, s *  0.6, 0.0); // e   40   glVertex3f(s *  0.4, s *  0.4, 0.0); glVertex3f(s *  0.4, s *  0.6, 0.0); // e
41   glVertex3f(s *  0.4, s *  0.6, 0.0); glVertex3f(s *  0.2, s *  0.6, 0.0); // e   41   glVertex3f(s *  0.4, s *  0.6, 0.0); glVertex3f(s *  0.2, s *  0.6, 0.0); // e
42   glVertex3f(s *  0.2, s *  0.6, 0.0); glVertex3f(s *  0.2, s *  0.2, 0.0); // e   42   glVertex3f(s *  0.2, s *  0.6, 0.0); glVertex3f(s *  0.2, s *  0.2, 0.0); // e
43   glVertex3f(s *  0.2, s *  0.2, 0.0); glVertex3f(s *  0.4, s *  0.2, 0.0); // e   43   glVertex3f(s *  0.2, s *  0.2, 0.0); glVertex3f(s *  0.4, s *  0.2, 0.0); // e
44   44
45   glVertex3f(s *  0.6, s *  0.6, 0.0); glVertex3f(s *  0.6, s *  0.2, 0.0); // n   45   glVertex3f(s *  0.6, s *  0.6, 0.0); glVertex3f(s *  0.6, s *  0.2, 0.0); // n
46   glVertex3f(s *  0.6, s *  0.6, 0.0); glVertex3f(s *  0.8, s *  0.6, 0.0); // n   46   glVertex3f(s *  0.6, s *  0.6, 0.0); glVertex3f(s *  0.8, s *  0.6, 0.0); // n
47   glVertex3f(s *  0.8, s *  0.6, 0.0); glVertex3f(s *  0.8, s *  0.2, 0.0); // n   47   glVertex3f(s *  0.8, s *  0.6, 0.0); glVertex3f(s *  0.8, s *  0.2, 0.0); // n
48   48
49   glVertex3f(s *  0.0, s * -0.2, 0.0); glVertex3f(s * -0.6, s * - 0.2, 0.0); // G   49   glVertex3f(s *  0.0, s * -0.2, 0.0); glVertex3f(s * -0.6, s * - 0.2, 0.0); // G
50   glVertex3f(s * -0.6, s * -0.2, 0.0); glVertex3f(s * -0.6, s * - 0.8, 0.0); // G   50   glVertex3f(s * -0.6, s * -0.2, 0.0); glVertex3f(s * -0.6, s * - 0.8, 0.0); // G
51   glVertex3f(s * -0.6, s * -0.8, 0.0); glVertex3f(s *  0.0, s * - 0.8, 0.0); // G   51   glVertex3f(s * -0.6, s * -0.8, 0.0); glVertex3f(s *  0.0, s * - 0.8, 0.0); // G
52   glVertex3f(s *  0.0, s * -0.8, 0.0); glVertex3f(s *  0.0, s * - 0.5, 0.0); // G   52   glVertex3f(s *  0.0, s * -0.8, 0.0); glVertex3f(s *  0.0, s * - 0.5, 0.0); // G
53   glVertex3f(s *  0.0, s * -0.5, 0.0); glVertex3f(s * -0.3, s * - 0.5, 0.0); // G   53   glVertex3f(s *  0.0, s * -0.5, 0.0); glVertex3f(s * -0.3, s * - 0.5, 0.0); // G
54   54
55   glVertex3f(s *  0.2, s * -0.2, 0.0); glVertex3f(s *  0.2, s * - 0.8, 0.0); // L   55   glVertex3f(s *  0.2, s * -0.2, 0.0); glVertex3f(s *  0.2, s * - 0.8, 0.0); // L
56   glVertex3f(s *  0.2, s * -0.8, 0.0); glVertex3f(s *  0.8, s * - 0.8, 0.0); // L   56   glVertex3f(s *  0.2, s * -0.8, 0.0); glVertex3f(s *  0.8, s * - 0.8, 0.0); // L
57   glEnd();   57   glEnd();
58   58
59   // glBegin(GL_LINE_LOOP); から glEnd(); までの間は、   59   // glBegin(GL_LINE_LOOP); から glEnd(); までの間は、
60   // 全ての頂点を使った閉じた線分が描画される   60   // 全ての頂点を使った閉じた線分が描画される
61   61
62   // 左上隅   62   // 左上隅
63   glColor3f(1.0, 1.0, 1.0);   63   glColor3f(1.0, 1.0, 1.0);
64   glBegin(GL_LINE_LOOP);   64   glBegin(GL_LINE_LOOP);
65   glVertex3f(s * -1.0, s *  1.0, 0.0);   65   glVertex3f(s * -1.0, s *  1.0, 0.0);
66   glVertex3f(s * -0.8, s *  1.0, 0.0);   66   glVertex3f(s * -0.8, s *  1.0, 0.0);
67   glVertex3f(s * -1.0, s *  0.8, 0.0);   67   glVertex3f(s * -1.0, s *  0.8, 0.0);
68   glEnd();   68   glEnd();
69      69   
70   // 右上隅   70   // 右上隅
71   glColor3f(0.1, 1.0, 1.0);   71   glColor3f(0.1, 1.0, 1.0);
72   glBegin(GL_LINE_LOOP);   72   glBegin(GL_LINE_LOOP);
73   glVertex3f(s *  0.8, s *  1.0, 0.0);   73   glVertex3f(s *  0.8, s *  1.0, 0.0);
74   glVertex3f(s *  1.0, s *  1.0, 0.0);   74   glVertex3f(s *  1.0, s *  1.0, 0.0);
75   glVertex3f(s *  1.0, s *  0.8, 0.0);   75   glVertex3f(s *  1.0, s *  0.8, 0.0);
76   glEnd();   76   glEnd();
77   77
78   // 左下隅   78   // 左下隅
79   glColor3f(1.0, 0.1, 1.0);   79   glColor3f(1.0, 0.1, 1.0);
80   glBegin(GL_LINE_LOOP);   80   glBegin(GL_LINE_LOOP);
81   glVertex3f(s * -1.0, s * -0.8, 0.0);   81   glVertex3f(s * -1.0, s * -0.8, 0.0);
82   glVertex3f(s * -0.8, s * -1.0, 0.0);   82   glVertex3f(s * -0.8, s * -1.0, 0.0);
83   glVertex3f(s * -1.0, s * -1.0, 0.0);   83   glVertex3f(s * -1.0, s * -1.0, 0.0);
84   glEnd();   84   glEnd();
85   85
86   // 右下隅   86   // 右下隅
87   glColor3f(1.0, 1.0, 0.1);   87   glColor3f(1.0, 1.0, 0.1);
88   glBegin(GL_LINE_LOOP);   88   glBegin(GL_LINE_LOOP);
89   glVertex3f(s *  0.8, s * -1.0, 0.0);   89   glVertex3f(s *  0.8, s * -1.0, 0.0);
90   glVertex3f(s *  1.0, s * -0.8, 0.0);   90   glVertex3f(s *  1.0, s * -0.8, 0.0);
91   glVertex3f(s *  1.0, s * -1.0, 0.0);   91   glVertex3f(s *  1.0, s * -1.0, 0.0);
92   glEnd();   92   glEnd();
93 }   93 }
94   94
95 // +----------------------------------------------------   95 // +----------------------------------------------------
96 // 直交投影   96 // 直交投影
97 // +----------------------------------------------------   97 // +----------------------------------------------------
98 void ic2_SetUpCamera_Ortho (void) {   98 void ic2_SetUpCamera_Ortho (void) {
99   // OpenGLのPROJECTION行列スタックにアクセス   99   // OpenGLのPROJECTION行列スタックにアクセス
100   glMatrixMode(GL_PROJECTION);   100   glMatrixMode(GL_PROJECTION);
101   101
102   // PROJECTION行列スタックトップを単位行列で初期化   102   // PROJECTION行列スタックトップを単位行列で初期化
103   glLoadIdentity();    103   glLoadIdentity(); 
104   104
105   // 直交投影行列を生成するサポート関数 glOrtho を呼び出す   105   // 直交投影行列を生成するサポート関数 glOrtho を呼び出す
106   // glOrtho(左端, 右端, 下端, 上端, 近接側クリッピング面,  遠方側クリッピング面)   106   // glOrtho(左端, 右端, 下端, 上端, 近接側クリッピング面,  遠方側クリッピング面)
107   glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); //    107   glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); // 
108 }   108 }
109   109
110 // +----------------------------------------------------   110 // +----------------------------------------------------
111 // 1フレーム分の描画   111 // 1フレーム分の描画
112 // +----------------------------------------------------   112 // +----------------------------------------------------
113 void ic2_DrawFrame (void) {   113 void ic2_DrawFrame (void) {
114   static int loopmax = 4; // loopmax回ごとに1回色を変える      
115   static int loopcounter = 0; // 何回目かを覚えておく変数      
116      
117   // (0) 指定色の変更      
118   loopcounter++;      
119   if (loopcounter == loopmax) {      
120     glClearColor(0.0, 1.0, 0.0, 0.0); // 4回に1回は緑      
121     loopcounter = 0;      
122   } else {      
123     glClearColor(0.0, 0.0, 0.0, 0.0); // 4回に3回は黒      
124   }      
125      
126   // (1) 描画バッファの初期化   114   // (1) 描画バッファの初期化
127   // 以前にglClearColor()で指定した色で塗り潰す   115   // 以前にglClearColor()で指定した色で塗り潰す
128   glClear(GL_COLOR_BUFFER_BIT);   116   glClear(GL_COLOR_BUFFER_BIT);
129   117
130   // (2) カメラの設定   118   // (2) カメラの設定
131   ic2_SetUpCamera_Ortho();   119   ic2_SetUpCamera_Ortho();
132   120
133   // (3) 光源の設置   121   // (3) 光源の設置
134   122
135   // (4) 物体の描画   123   // (4) 物体の描画
136   ic2_OpenGLLogo(0.95);   124   ic2_OpenGLLogo(0.95);
137   125
138   // (5) 描画バッファの切替   126   // (5) 描画バッファの切替
139   glutSwapBuffers();   127   glutSwapBuffers();
140 }   128 }
141   129
142 // +----------------------------------------------------   130 // +----------------------------------------------------
143 // タイマーで呼出し(繰り返すことで「一定間隔呼出し」化)   131 // タイマーで呼出し(繰り返すことで「一定間隔呼出し」化)
144 // +----------------------------------------------------   132 // +----------------------------------------------------
145 void ic2_timerhandler(int keynumber){   133 void ic2_timerhandler(int keynumber){
146   glutPostRedisplay(); // OpenGLのmainloopに戻ったら再描画を頼む   134   glutPostRedisplay(); // OpenGLのmainloopに戻ったら再描画を頼む
147   glutTimerFunc(250, ic2_timerhandler, 0); // 250[ms]後にまた呼び出す   135   glutTimerFunc(250, ic2_timerhandler, 0); // 250[ms]後にまた呼び出す
148 }   136 }
149   137
150 // +----------------------------------------------------   138 // +----------------------------------------------------
151 // OpenGLとしてのWindowの初期化   139 // OpenGLとしてのWindowの初期化
152 // +----------------------------------------------------   140 // +----------------------------------------------------
153 void ic2_BootWindow (char winname[]) {   141 void ic2_BootWindow (char winname[]) {
154   142
155   // DisplayModeの設定(それぞれを|で繋ぐ)   143   // DisplayModeの設定(それぞれを|で繋ぐ)
156   //   GLUT_DOUBLE ... ダブルバッファ   144   //   GLUT_DOUBLE ... ダブルバッファ
157   //   GLUT_RGB    ... RGB表色モード   145   //   GLUT_RGB    ... RGB表色モード
158   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);    146   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); 
159   147
160   // 準備(Initialization)が済んだらウィンドウを開く   148   // 準備(Initialization)が済んだらウィンドウを開く
161   glutCreateWindow(winname);   149   glutCreateWindow(winname);
162   150
163   // Callback関数を設定 (イベント処理)   151   // Callback関数を設定 (イベント処理)
164   glutDisplayFunc(ic2_DrawFrame); // フレームを(再)描画するために呼び出す関数   152   glutDisplayFunc(ic2_DrawFrame); // フレームを(再)描画するために呼び出す関数
165   glutTimerFunc(250, ic2_timerhandler, 0); // 250[ms]後に呼び出す関数   153   glutTimerFunc(250, ic2_timerhandler, 0); // 250[ms]後に呼び出す関数
166   154
167   // ウィンドウ全体を書き直すときの色(R,G,B,0) ここでは黒   155   // ウィンドウ全体を書き直すときの色(R,G,B,0) ここでは黒
168   glClearColor(0.0, 0.0, 0.0, 0.0);   156   glClearColor(0.0, 0.0, 0.0, 0.0);
169 }   157 }
170   158
171 // +----------------------------------------------------   159 // +----------------------------------------------------
172 // Main Function   160 // Main Function
173 // +----------------------------------------------------   161 // +----------------------------------------------------
174 int main (int argc, char *argv[]) {   162 int main (int argc, char *argv[]) {
175   163
176   // glutライブラリによる引数の解釈   164   // glutライブラリによる引数の解釈
177   glutInit(&argc, argv);   165   glutInit(&argc, argv);
178   166
179   // OpenGL Window の初期化   167   // OpenGL Window の初期化
180   ic2_BootWindow(argv[0]);   168   ic2_BootWindow(argv[0]);
181   169
182   // 無限ループの開始   170   // 無限ループの開始
183   glutMainLoop();   171   glutMainLoop();
184      172   
185   return 0;   173   return 0;
186 }   174 }

Generated by diff2html.pl on Thu Feb 6 07:50:09 2014
Command-line:
/home/ubuntu/www-mirror/2013-tsukuba-ic2/code/diff2html_utf8.pl ../06-06/06-06-LogoOpenGL.c 06-09-LogoOpenGL.c