Modified lines:  7
Added line:  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, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 134, 136
Removed line:  None
Generated by diff2html.pl
© Yves Bailly, MandrakeSoft S.A. 2001, Ryohei Morita 2007
diff2html.pl is licensed under the GNU GPL.

  ../06-05/06-05-OrthogonalCamera.c     06-06-LogoOpenGL.c
  101 lines
3406 bytes
Last modified : Wed Dec 14 04:33:44 2011

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

Generated by diff2html.pl on Mon Oct 29 12:22:57 2012
Command-line:
/home/ubuntu/scripts/diff2html_utf.pl ../06-05/06-05-OrthogonalCamera.c 06-06-LogoOpenGL.c