|
Generated by diff2html.pl © Yves Bailly, MandrakeSoft S.A. 2001, Ryohei Morita 2007 diff2html.pl is licensed under the GNU GPL. |
31-HelloSquare.c | 32-KillbyESC.c | |||
---|---|---|---|---|
83 lines 2402 bytes Last modified : Mon Oct 24 10:48:43 2011 |
101 lines 3086 bytes Last modified : Mon Oct 24 10:47: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.1. Hello Square | 6 | // 3.2. Kill Program by ESC key | |
7 | // プログラムは強制終了しないといけないので危険 | 7 | // プログラムは強制終了しないといけないので危険 | |
8 | 8 | |||
9 | #include <stdio.h> | 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 | glColor3f(1.0, 1.0, 1.0); | 20 | glColor3f(1.0, 1.0, 1.0); | |
21 | glLineWidth(1.0); | 21 | glLineWidth(1.0); | |
22 | glBegin(GL_LINE_LOOP); { | 22 | glBegin(GL_LINE_LOOP); { | |
23 | glVertex3f(s * -1, s * -1, 0.0); | 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 | } glEnd(); | 27 | } glEnd(); | |
28 | } | 28 | } | |
29 | 29 | |||
30 | // +---------------------------------------------------- | 30 | // +---------------------------------------------------- | |
31 | // スクリーンに描画する | 31 | // スクリーンに描画する | |
32 | // +---------------------------------------------------- | 32 | // +---------------------------------------------------- | |
33 | void ic2_DrawFrame (void) { | 33 | void ic2_DrawFrame (void) { | |
34 | 34 | |||
35 | // 以前にglClearColor()で指定した色で塗り潰す | 35 | // 以前にglClearColor()で指定した色で塗り潰す | |
36 | glClear(GL_COLOR_BUFFER_BIT); | 36 | glClear(GL_COLOR_BUFFER_BIT); | |
37 | 37 | |||
38 | // 物体描画:正方形 | 38 | // 物体描画:正方形 | |
39 | ic2_FigSquare(0.9); | 39 | ic2_FigSquare(0.9); | |
40 | 40 | |||
41 | // スクリーンの切り替え | 41 | // スクリーンの切り替え | |
42 | glutSwapBuffers(); | 42 | glutSwapBuffers(); | |
43 | 43 | |||
44 | } | 44 | } | |
45 | 45 | |||
46 | // +---------------------------------------------------- | 46 | // +---------------------------------------------------- | |
47 | // キーが何か押されたときの対策用関数 | |||
48 | // +---------------------------------------------------- | |||
49 | // glutKeyboardFunc()にて登録予定 | |||
50 | // 引数 : key ... 入力文字 | |||
51 | // 引数 : x ... 文字が押されたときのマウスカーソルのX位置 | |||
52 | // 引数 : y ... 文字が押されたときのマウスカーソルのY位置 | |||
53 | void ic2_NormalKeyInput (unsigned char key, int x, int y) { | |||
54 | switch (key) { | |||
55 | case 'q' : | |||
56 | case 'Q' : | |||
57 | case 27 : // ESCキーのこと | |||
58 | exit (0); | |||
59 | break; | |||
60 | } | |||
61 | } | |||
62 | ||||
63 | // +---------------------------------------------------- | |||
47 | // OpenGLとしてのWindowの初期化 | 64 | // OpenGLとしてのWindowの初期化 | |
48 | // +---------------------------------------------------- | 65 | // +---------------------------------------------------- | |
49 | void ic2_BootWindow (char winname[]) { | 66 | void ic2_BootWindow (char winname[]) { | |
50 | 67 | |||
51 | // ダブルバッファ,RGB表色モード を利用 | 68 | // ダブルバッファ,RGB表色モード を利用 | |
52 | glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); | 69 | glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); | |
53 | 70 | |||
54 | // ウィンドウを開く | 71 | // ウィンドウを開く | |
55 | glutCreateWindow(winname); | 72 | glutCreateWindow(winname); | |
56 | 73 | |||
57 | // レンダリングにはSmooth Shadingを採用 | 74 | // レンダリングにはSmooth Shadingを採用 | |
58 | glShadeModel(GL_SMOOTH); | 75 | glShadeModel(GL_SMOOTH); | |
59 | 76 | |||
60 | // ウィンドウ全体を書き直すときの色(ここでは黒) | 77 | // ウィンドウ全体を書き直すときの色(ここでは黒) | |
61 | glClearColor(0.0, 0.0, 0.0, 0.0); | 78 | glClearColor(0.0, 0.0, 0.0, 0.0); | |
62 | 79 | |||
63 | // Callback関数を設定 (イベント処理) | 80 | // Callback関数を設定 (イベント処理) | |
64 | glutIdleFunc(ic2_DrawFrame); // 暇だったらフレームを描く(よい実装ではない) | 81 | glutIdleFunc(ic2_DrawFrame); // 暇だったらフレームを描く(よい実装ではない) | |
82 | glutKeyboardFunc(ic2_NormalKeyInput); // キーが押されたときの準備 | |||
65 | } | 83 | } | |
66 | 84 | |||
67 | //d main.c ********************************************************************** | 85 | //d main.c ********************************************************************** | |
68 | // +---------------------------------------------------- | 86 | // +---------------------------------------------------- | |
69 | // Main Function | 87 | // Main Function | |
70 | // +---------------------------------------------------- | 88 | // +---------------------------------------------------- | |
71 | int main (int argc, char *argv[]) { | 89 | int main (int argc, char *argv[]) { | |
72 | 90 | |||
73 | // glutライブラリによる引数の解釈 | 91 | // glutライブラリによる引数の解釈 | |
74 | glutInit(&argc, argv); | 92 | glutInit(&argc, argv); | |
75 | 93 | |||
76 | // OpenGL Window の初期化 | 94 | // OpenGL Window の初期化 | |
77 | ic2_BootWindow(argv[0]); | 95 | ic2_BootWindow(argv[0]); | |
78 | 96 | |||
79 | // 無限ループの開始 | 97 | // 無限ループの開始 | |
80 | glutMainLoop(); | 98 | glutMainLoop(); | |
81 | 99 | |||
82 | return 0; | 100 | return 0; | |
83 | } | 101 | } |