0001: // ----------------------------------------------------------------------------
0002: //
0003: // main.cpp - GLUT で3Dのサンプルソース
0004: // 
0005: // Copyright (c) 2002 今給黎 隆 (imagire@nify.com)
0006: // All Rights Reserved.
0007: //
0008: // ----------------------------------------------------------------------------
0009: 
0010: #include <GL/glut.h>
0011: 
0012: // ---------------------------------------------------------------------------
0013: // オブジェクト
0014: // ---------------------------------------------------------------------------
0015: static float r = 0.0f;      // ポリゴンの回転角
0016: 
0017: // ---------------------------------------------------------------------------
0018: // 画面描画
0019: // ---------------------------------------------------------------------------
0020: void display(void)
0021: {
0022:     // 画面のクリア
0023:     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
0024: 
0025:     // ビュー行列の設定
0026:     glMatrixMode(GL_MODELVIEW);
0027:     glLoadIdentity();
0028:     gluLookAt(  0.0, 0.0, 3.0,      // 視点
0029:                 0.0, 0.0, 0.0,      // 注目点
0030:                 0.0, 1.0, 0.0);     // 上方向
0031: 
0032:     // -----------------------------------------------------------------------
0033:     // ポリゴン描画
0034: 
0035:     glPushMatrix();                 // ビュー行列が他のポリゴンでも使えるよう退避
0036:     //        rot    x    y    z    
0037:     glRotated(r, 0.0, 1.0, 0.0);    // ポリゴンの回転角を設定
0038:     // ポリゴン描画
0039:     glBegin(GL_TRIANGLE_STRIP);     // ストリップ設定
0040:     glColor3d(1.0, 0.0, 0.0);       // 赤
0041:     glVertex3d(-0.9, +0.9, 0.0);
0042:     glColor3d(0.0, 1.0, 0.0);       // 青
0043:     glVertex3d(+0.9, +0.9, 0.0);
0044:     glColor3d(0.0, 0.0, 1.0);       // 緑
0045:     glVertex3d(-0.9, -0.9, 0.0);
0046:     glColor3d(1.0, 1.0, 1.0);       // 白
0047:     glVertex3d(+0.9, -0.9, 0.0);
0048:     glEnd();                        // ポリゴンの描画終了
0049:     glPopMatrix();                  // ビュー行列に現在の行列を戻す
0050: 
0051:     glutSwapBuffers();              // 画面の更新の終了
0052: }
0053: // ---------------------------------------------------------------------------
0054: // 画面がリサイズされたとき
0055: // ---------------------------------------------------------------------------
0056: void resize(int w, int h)
0057: {
0058:     // ビューポートの設定
0059:     glViewport(0, 0, w, h);
0060: 
0061:     // 射影行列の設定
0062:     glMatrixMode(GL_PROJECTION);
0063:     glLoadIdentity();
0064:     gluPerspective( 60.0,           // 画角
0065:                     1.0,            // アスペクト比
0066:                     1.0, 100.0);    // 前方面、後方面
0067: }
0068: // ---------------------------------------------------------------------------
0069: // ひまなときに実行される
0070: // ---------------------------------------------------------------------------
0071: void idle()
0072: {
0073:     // ポリゴンの回転
0074:     r = r + 3.0f;
0075:     while (360.0f < r) r -= 360.0f;
0076: 
0077:     glutPostRedisplay();            // 再描画リクエスト
0078: }
0079: // ---------------------------------------------------------------------------
0080: // メイン関数
0081: // ---------------------------------------------------------------------------
0082: int main(int argc, char *argv[])
0083: {
0084:     // ウィンドウの作成
0085:     glutInitWindowPosition(100, 100);   // 表示位置
0086:     glutInitWindowSize(512, 512);       // サイズ
0087:     glutInit(&argc, argv);              // GLの初期化
0088:     glutInitDisplayMode(GLUT_DOUBLE     // 描画モード
0089:                      | GLUT_RGBA        // wバッファ+RGBA+深度バッファ
0090:                      | GLUT_DEPTH);
0091:     glutCreateWindow(argv[0]);          // ウィンドウの生成
0092: 
0093:     // コールバック関数の設定
0094:     glutDisplayFunc(display);   // 描画関数
0095:     glutReshapeFunc(resize);    // 画面が変形したとき
0096:     glutIdleFunc(idle);         // ひまなとき
0097: 
0098:     // 一度だけすればいい設定
0099:     glClearColor(0.0, 0.0, 0.3, 0.0);   // 背景色の設定
0100:     glEnable(GL_DEPTH_TEST);            // 深度バッファの使用
0101:   
0102:     glutMainLoop();                     // メインループ
0103: 
0104:     return 0;
0105: }