| 
 | 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 | } |