~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  OpenGL 入門講座    「三次元グラフィックスの基礎とOpenGL関数の全体像を掴む」 第1-3回 「3D-CG基礎、ポリゴン表示、ワイヤー表示」用のプログラム ----- プログラム全体像 ----- ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ では、ここからは、今回のプログラム(program1_1.c)の説明を行います。 皆さん、プログラムはうまくコンパイルして実行することができたでしょう か?エラーになったり、プログラムの修正箇所がよくわからない場合等は、 遠慮なく OpenGL ML にメイルをお送りください。私を含めて、メンバの方の アドバイスが受けれるはずです。(^^;) また、合木さんの作られた configuer を使えば、簡単に Makefile が作れる ようになっていますので、活用してください。 では、コンパイルはうまくいったものとして、話を続けます。 ■ プログラムのバグ:  プログラムにバグがありました。申しわけありませんが、次の行を修正して  ください。 static float bg[] = { 0.2, 0.5, 0.8 }; この行を static float bg[] = { 0.2, 0.5, 0.8, 1.0 }; ^^^^^追加 に修正してください。 ■ このプログラムは、どんなプログラム?:  今回のプログラムは、マウスの左右ボタンを押すことで、視点の位置を変え  て、箱を表示するものです。視点を変えることで、3次元の箱がどのように  見えるのかを確かめてください。隠面消去を行っているので、常に手前の面  が見えています。  このプログラムは、GL, GLU ライブラリで提供されている次の機能を使用し  ています。  ・カラー設定  ・ワイヤー表示  ・ポリゴン表示  ・デプスバッファを利用した隠面消去  ・透視変換  また、AUX ライブラリで提供されている次の機能も使用しています。  ・キー入力  ・再描画  ・リサイズ 今回、学習していただきたい内容は、これらすべてではありません。この 中のカラー設定、ポリゴン表示、ワイヤー表示です。 ■ ヘッダー・ファイル GL, GLU, AUX ライブラリをインクルードしているので、次のヘッダー・ ファイルをインクルードしています。  #include  #include  #include "glaux.h" Mesa では、aux.h ではなく、glaux.h となります。 ■ メイン関数: /* シングルバッファ、カラーモード RGB、デプスバッファ有効の Window を指定します */ auxInitDisplayMode (AUX_SINGLE | AUX_RGB | AUX_DEPTH); /* (0,0) の位置に、500x500 の大きさで Window を開きます */ auxInitPosition (0, 0, 500, 500); /* Window のタイトル文字列を指定します */ auxInitWindow (argv[0]); /* マウスボタンを押した時に呼ばれるコールバック関数を指定   します */ auxMouseFunc (AUX_LEFTBUTTON, AUX_MOUSEDOWN, up); auxMouseFunc (AUX_RIGHTBUTTON, AUX_MOUSEDOWN, down); /* 初期化 */ myinit(); /* 形状を変更する時に呼ばれるコールバック関数を指定します */ auxReshapeFunc (myReshape); /* イベント処理ループ */ /* Window が更新される時に呼ばれるコールバック関数を指定 します */ auxMainLoop(display); ■ サブ関数、グローバル変数   /* 視点位置 (15.0, 20.0, 30.0) です。*/ static float eye[] = { 15.0, 20.0, 30 };   /* 背景色 青色(0.2, 0.5, 0.8, 1.0) です。*/ static float bg[] = { 0.2, 0.5, 0.8, 1.0 }; /* 赤、緑、青の3色です。*/ /* これらは、3軸の色として使用しています。*/ static float red[] = {1.0, 0.0, 0.0}; static float green[] = {0.0, 1.0, 0.0}; static float blue[] = {0.0, 0.0, 1.0};   ・myinit()   デプスバッファを利用した隠面消去を有効にしています。 ・myReshape() マトリックスの初期設定を行います。 透視投影の指定も行っています。 ・display() 1. bg[] で指定された色で、画面を消去します。これは、背景色になり ます。 2. 視点を eye[] で指定しています。注視点は、原点を指定しています。    3. 座標軸を表示します。    4. 箱を表示します。 ・axis3() X 軸、Y 軸、Z 軸を書きます。 ・axis()  矢印を書きます。これが、X 軸、Y 軸、Z 軸になります。 ・drawBox() 箱を書くために、6 枚のポリゴンを書きます。   ・up(), down()   視点の Y 座標を変化させます。   Y の値が増えると、視点が上がり、箱を見下ろすようになります。   Y の値が減ると、視点が下がり、箱を見上げるようになります。 ■ 用語解説: ○ 透視投影   立体を平面に投影して表現する方法の一つ。観測者から近いものほど   大きく、遠いものほど小さくして奥行きを出します。 ○ ポリゴン 多角形。通常、三次元物体は、たくさんのポリゴンから構成されてい ます。 ■ 備考:  三次元座標空間に関する説明を行っていないので、X 軸、Y 軸、Z 軸とい  われても何のことか分からないかもしれませんが、今後説明を行いますの  でそれまでお待ちください。 ■ 次回予告: 今回は、プログラム全体の大まかな説明を行いましたが、次回からはもう 少し詳しい説明を行います。  第1-4回では、OpenGL の色について説明を行う予定です。 ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ -- 寺西 忠勝