今週から、統合開発環境 Eclipse(エクリプス)を使います。
最新版は3.7.1ですが授業では3.2を使います。
幾つかのプログラミング言語での開発をサポートしています(もともとはJava)。
ここではそのうちのC言語サポートの部分を利用。
以下は原則として、C言語開発における説明です。
Eclipseのファイル階層
概念階層は以下の通りになります。
ファイル階層としても、ほぼ同じになります。
ワークスペースがプロジェクトを直接収容する場合、各プロジェクトについて考えると、ファイル階層は以下の様になります。
なお、この場合、プロジェクト名のディレクトリ内にはEclipseが作る様々なファイルも置かれるようになることに注意してください。
本講義では後者の外部収容式で説明します。
Eclipseの作業概念
C言語では下記2つのパースペクティブを行ったり来たりします。
2.1 Hello ESYS のまともな形をもう一度
week1の1.2節(のよいほう)のと同じです。
ソース:ic2-week1-HelloESYS-Better.c
ターゲットディレクトリ:$HOME/2011ic2-workdir/week2/21-HelloESYS
ターゲット名:HelloEYS-Simple
2.2 Eclipse 起動!
多少初期化します。
その上で、以下の作業を行います。
この作業のうちに、いろいろEclipseの便利機能について説明します。
これには、パースペクティブの切り替え、パースペクティブの戻し方、デバッガの使い方等が含まれます。
$ cd $HOME/2011ic2-workdir/week2/21-HelloESYS
$ ./Debug/HelloEYS-Simple |
2.3 HellESYS-Fullも再度挑戦
week1の1.3節のと同じです。
ソース:ic2-week1-HelloESYS-Full.c
ターゲットディレクトリ:$HOME/2011ic2-workdir/week2/23-HelloESYS-Full
ターゲット名:HelloEYS-Full
2.4 分割したファイル群での例
week1の4節と同じです。
ic2-week1-Calculations-Main.c
ic2-week1-Calculations-Sub-Input.c
ic2-week1-Calculations-Sub-Square-And-Double.c
ic2-week1-Calculations-Sub-Divide3.c
ic2-week1-Calculations-Sub-RepeatTwice.c
ターゲットディレクトリ:$HOME/2011ic2-workdir/week2/24-CodeSplit
ターゲット名:CodeSplit
今年からは、昨年までと違って、先にOpenGLの概念を学習していきます。
今週は、「カメラに関しては一切操作しません」。
3.1 OpenGL Windowでの表示
「正方形」の枠を「ウィンドウに合わせて」表示します。
最小限のコード量ですが、これだけでもいろいろ勉強する必要があります。
あと、glutInit()関数の機能にも注目。
31-HelloSquare.c
3.2 Key 入力の受付
ちゃんと特定のキー入力で始末できるようにしましょう。
OpenGLでは、Callbackという概念を使ってキーボードからの入力をプログラム側で受け取ります。
32-KillbyESC.c
31 vs 32(1つ前からの差分です)
3.3 3次元物体を描いてみよう‥あれ?
TeapodはOpenGLでは有名な参照用のCG物体です。
3次元物体として、小平面の集合でできています。
小平面にCGらしく色をつけるためには、「光を導入して」「物体に反射特性を与えて」「観測する」ことが必要です。
さらにCGらしい技法で、Teapodはなめらかに見えてますが、実際を見たい人はglShadeModel(GL_SMOOTH)をglShadeModel(GL_FLAT)にしてみましょう。
33-BadTeaPod.c
32 vs 33(1つ前からの差分です)
3.4 3次元物体を描いてみよう・修正版
3.3で違和感を感じられない鈍感な人はCGクリエータには向いてないかもしれません。
ここでは正確な描画をするために、デプスバッファを導入します。
34-GoodTeaPod.c
33 vs 34(1つ前からの差分です)
3.5 世界を動かしてみよう
2011/10/31はこの3.5節かから授業を行います。
実際には何が動いて(何を動かして)いるのでしょうね??
ここからは1年から学習してきた線形代数の理解力が問われます。
OpenGLでの、「世界」と「カメラ」の関係を正確に知る必要があります。
35-MoveTheWorld.c
34 vs 35(1つ前からの差分です)
課題はいずれも2011/10/31,13:30 (JST)提出締切である。
3.4節の34-GoodTeaPod.cを、1週目の4節と同様の方法で3つ以上のソースファイルに分割し、かつそれがeclipseの1つのプロジェクトとしてManaged Make C Projectでバイナリを自動生成できるようにせよ。
提出物
3.5節の35-MoveTheWorld.cで表示されるTeapodについて、デフォルトの状態から下図に示す状態へ回転運動させる行列を考える。
ただし、ここではTeaPodの局所座標系の点 pTは4次元の斉次ベクトルで表現され、ある剛体変換行列Mの右から乗算することで運動が表現されるとする。
また、カメラ座標系は授業で示した通り、画面右方がX軸正、画面上方がY軸正、画面奥手がZ軸正とする。
(2B-1)この回転運動を表す剛体変換行列を、導出課程と共に示せ。
(2B-2)このような回転運動を表現する剛体変換行列は一意に表現されるか?yes/noのどちらの解答であれ、その証明と共に解答を示せ。
回転後 |
提出物
3.5節の35-MoveTheWorld.cで表示されるTeapodについて、Z=0の平面でTeaPodを囲う正方形と同様の正方形を、X=0, Y=0の平面に対しても用意せよ。
この直交3正方形はTeaPodの移動・回転に伴って移動・回転すること(TeaPodと一体にみえるような運動をすること)。
直交3正方形はそれぞれ異なる色で描画されること。このときにZ=0の正方形と同じくシェーディングされないこと。
提出物