Modified lines:  6, 7
Added line:  20, 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, 88, 89, 90, 93, 94
Removed line:  None
Generated by diff2html.pl
© Yves Bailly, MandrakeSoft S.A. 2001, Ryohei Morita 2007
diff2html.pl is licensed under the GNU GPL.

  32-KillbyESC.c     33-BadTeaPod.c
  101 lines
3086 bytes
Last modified : Mon Oct 24 10:47:47 2011

    156 lines
5549 bytes
Last modified : Mon Oct 24 12:24:47 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/24 kameda[at]iit.tsukuba.ac.jp   5 // 2011/10/24 kameda[at]iit.tsukuba.ac.jp
6 // 3.2. Kill Program by ESC key   6 // 3.3. Teapod! 
7 //      プログラムは強制終了しないといけないので危険   7 //      でも少しおかしい。特に注ぎ口。
8   8
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 // +----------------------------------------------------   16 // +----------------------------------------------------
17 // 正方形を描く (白色の線幅 1.0)   17 // 正方形を描く (白色の線幅 1.0)
18 // +----------------------------------------------------   18 // +----------------------------------------------------
19 void ic2_FigSquare (float s) {   19 void ic2_FigSquare (float s) {
      20   glDisable(GL_LIGHTING);   // 光源によるシェーディングを一旦切る
20   glColor3f(1.0, 1.0, 1.0);   21   glColor3f(1.0, 1.0, 1.0);
21   glLineWidth(1.0);   22   glLineWidth(1.0);
22   glBegin(GL_LINE_LOOP); {   23   glBegin(GL_LINE_LOOP); {
23     glVertex3f(s * -1, s * -1, 0.0);   24     glVertex3f(s * -1, s * -1, 0.0);
24     glVertex3f(s * +1, s * -1, 0.0);   25     glVertex3f(s * +1, s * -1, 0.0);
25     glVertex3f(s * +1, s * +1, 0.0);   26     glVertex3f(s * +1, s * +1, 0.0);
26     glVertex3f(s * -1, s * +1, 0.0);   27     glVertex3f(s * -1, s * +1, 0.0);
27   } glEnd();   28   } glEnd();
      29   glEnable(GL_LIGHTING);   // 光源によるシェーディングを開始する
      30 }
      31
      32 // +----------------------------------------------------
      33 // ティーポットを描く (glutの作り付け関数の1つ)
      34 // +----------------------------------------------------
      35 void ic2_FigSolidTeapot (float s) {
      36   GLfloat obj_ref[] = {1.0, 1.0, 0.3, 1.0}; // teapotの色情報 (DIFFUSE用)
      37   GLfloat obj_shn[] = {10.0};               // teapotの色情報 (SHININESS用)
      38
      39   // 色の設定
      40   glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, obj_ref);
      41   glMaterialfv(GL_FRONT, GL_SHININESS, obj_shn);
      42
      43   glutSolidTeapot(s);
      44 }
      45
      46 // +----------------------------------------------------
      47 // 光源を用意
      48 // +----------------------------------------------------
      49 //  X     Y     Z     Diff(R,G,B)   Spec(R,G,B)
      50 //  1.0   2.0   3.0   0.2 0.2 0.2   0.4 0.4 0.4
      51 // -1.0   2.0   3.0   0.4 0.4 0.4   0.4 0.4 0.4
      52 //  0.0   4.0   0.0   1.0 1.0 1.0   1.0 1.0 1.0
      53 void ic2_LightSetA (void) {
      54   static int initflag = 0;
      55
      56   if (initflag == 0) {
      57     glEnable(GL_NORMALIZE);  // 法線ベクトルを常に正規化して解釈させる
      58     glEnable(GL_LIGHTING);   // 光源によるシェーディングを開始する
      59     glEnable(GL_LIGHT0);     // LIGHT0 を利用
      60     glEnable(GL_LIGHT1);     // LIGHT1 を利用
      61     glEnable(GL_LIGHT2);     // LIGHT2 を利用
      62     initflag = 1;
      63   }
      64   
      65   GLfloat val[4];
      66
      67   val[0] =  1.0; val[1] =  2.0; val[2] =  3.0; val[3] = 1.0; glLightfv(GL_LIGHT0, GL_POSITION, val);
      68   val[0] =  0.2; val[1] =  0.2; val[2] =  0.2; val[3] = 1.0; glLightfv(GL_LIGHT0, GL_DIFFUSE,  val);
      69   val[0] =  0.4; val[1] =  0.4; val[2] =  0.4; val[3] = 1.0; glLightfv(GL_LIGHT0, GL_SPECULAR, val);
      70
      71   val[0] = -1.0; val[1] =  2.0; val[2] =  3.0; val[3] = 1.0; glLightfv(GL_LIGHT1, GL_POSITION, val);
      72   val[0] =  0.4; val[1] =  0.4; val[2] =  0.4; val[3] = 1.0; glLightfv(GL_LIGHT1, GL_DIFFUSE,  val);
      73   val[0] =  0.4; val[1] =  0.4; val[2] =  0.4; val[3] = 1.0; glLightfv(GL_LIGHT1, GL_SPECULAR, val);
      74
      75   val[0] =  0.0; val[1] =  4.0; val[2] =  0.0; val[3] = 1.0; glLightfv(GL_LIGHT2, GL_POSITION, val);
      76   val[0] =  1.0; val[1] =  1.0; val[2] =  1.0; val[3] = 1.0; glLightfv(GL_LIGHT2, GL_DIFFUSE,  val);
      77   val[0] =  1.0; val[1] =  1.0; val[2] =  1.0; val[3] = 1.0; glLightfv(GL_LIGHT2, GL_SPECULAR, val);
28 }   78 }
29   79
30 // +----------------------------------------------------   80 // +----------------------------------------------------
31 // スクリーンに描画する   81 // スクリーンに描画する
32 // +----------------------------------------------------   82 // +----------------------------------------------------
33 void ic2_DrawFrame (void) {   83 void ic2_DrawFrame (void) {
34   84
35   // 以前にglClearColor()で指定した色で塗り潰す   85   // 以前にglClearColor()で指定した色で塗り潰す
36   glClear(GL_COLOR_BUFFER_BIT);   86   glClear(GL_COLOR_BUFFER_BIT);
37   87
      88   // ある設定の光源の用意
      89   ic2_LightSetA();
      90
38   // 物体描画:正方形   91   // 物体描画:正方形
39   ic2_FigSquare(0.9);   92   ic2_FigSquare(0.9);
      93   // 物体描画:ティーポット
      94   ic2_FigSolidTeapot(0.5);
40   95
41   // スクリーンの切り替え   96   // スクリーンの切り替え
42   glutSwapBuffers();   97   glutSwapBuffers();
43   98
44 }   99 }
45   100
46 // +----------------------------------------------------   101 // +----------------------------------------------------
47 // キーが何か押されたときの対策用関数    102 // キーが何か押されたときの対策用関数 
48 // +----------------------------------------------------   103 // +----------------------------------------------------
49 // glutKeyboardFunc()にて登録予定   104 // glutKeyboardFunc()にて登録予定
50 // 引数 : key ... 入力文字    105 // 引数 : key ... 入力文字 
51 // 引数 : x   ... 文字が押されたときのマウスカーソルのX位置    106 // 引数 : x   ... 文字が押されたときのマウスカーソルのX位置 
52 // 引数 : y   ... 文字が押されたときのマウスカーソルのY位置    107 // 引数 : y   ... 文字が押されたときのマウスカーソルのY位置 
53 void ic2_NormalKeyInput (unsigned char key, int x, int y) {   108 void ic2_NormalKeyInput (unsigned char key, int x, int y) {
54   switch (key) {   109   switch (key) {
55   case 'q' :   110   case 'q' :
56   case 'Q' :   111   case 'Q' :
57   case 27 : // ESCキーのこと   112   case 27 : // ESCキーのこと
58     exit (0);   113     exit (0);
59     break;   114     break;
60   }   115   }
61 }   116 }
62   117
63 // +----------------------------------------------------   118 // +----------------------------------------------------
64 // OpenGLとしてのWindowの初期化   119 // OpenGLとしてのWindowの初期化
65 // +----------------------------------------------------   120 // +----------------------------------------------------
66 void ic2_BootWindow (char winname[]) {   121 void ic2_BootWindow (char winname[]) {
67   122
68   // ダブルバッファ,RGB表色モード を利用   123   // ダブルバッファ,RGB表色モード を利用
69   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);    124   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); 
70   125
71   // ウィンドウを開く   126   // ウィンドウを開く
72   glutCreateWindow(winname);   127   glutCreateWindow(winname);
73   128
74   // レンダリングにはSmooth Shadingを採用   129   // レンダリングにはSmooth Shadingを採用
75   glShadeModel(GL_SMOOTH);   130   glShadeModel(GL_SMOOTH);
76   131
77   // ウィンドウ全体を書き直すときの色(ここでは黒)   132   // ウィンドウ全体を書き直すときの色(ここでは黒)
78   glClearColor(0.0, 0.0, 0.0, 0.0);   133   glClearColor(0.0, 0.0, 0.0, 0.0);
79   134
80   // Callback関数を設定 (イベント処理)   135   // Callback関数を設定 (イベント処理)
81   glutIdleFunc(ic2_DrawFrame); // 暇だったらフレームを描く(よい実装ではない)   136   glutIdleFunc(ic2_DrawFrame); // 暇だったらフレームを描く(よい実装ではない)
82   glutKeyboardFunc(ic2_NormalKeyInput); // キーが押されたときの準備   137   glutKeyboardFunc(ic2_NormalKeyInput); // キーが押されたときの準備
83 }   138 }
84   139
85 //d main.c  **********************************************************************   140 //d main.c  **********************************************************************
86 // +----------------------------------------------------   141 // +----------------------------------------------------
87 // Main Function   142 // Main Function
88 // +----------------------------------------------------   143 // +----------------------------------------------------
89 int main (int argc, char *argv[]) {   144 int main (int argc, char *argv[]) {
90   145
91   // glutライブラリによる引数の解釈   146   // glutライブラリによる引数の解釈
92   glutInit(&argc, argv);   147   glutInit(&argc, argv);
93   148
94   // OpenGL Window の初期化   149   // OpenGL Window の初期化
95   ic2_BootWindow(argv[0]);   150   ic2_BootWindow(argv[0]);
96   151
97   // 無限ループの開始   152   // 無限ループの開始
98   glutMainLoop();   153   glutMainLoop();
99      154   
100   return 0;   155   return 0;
101 }   156 }

Generated by diff2html.pl on Mon Oct 24 12:33:07 2011
Command-line:
/home/ubuntu/scripts/diff2html.pl 32-KillbyESC.c 33-BadTeaPod.c