計算機序論2(2011年度)実習2週目(2011/10/24)

計算機序論2, 授業科目, www.kameda-lab.org 2011/11/21f

1. Eclipse

今週から、統合開発環境 Eclipse(エクリプス)を使います。
最新版は3.7.1ですが授業では3.2を使います。

幾つかのプログラミング言語での開発をサポートしています(もともとはJava)。
ここではそのうちのC言語サポートの部分を利用。
以下は原則として、C言語開発における説明です。

Eclipseのファイル階層

概念階層は以下の通りになります。

  1. ワークスペースA(プロジェクト直接収容の場合;Eclipseのdefault通りに作業していく状況)
    1. プロジェクト1(≒1つの実行プログラムを作るための単位。ソースは単一ファイルかも知れないし複数ファイルかもかもしれない)
    2. プロジェクト2(同上)
    3. プロジェクト3(同上)
    4. ‥‥
  2. ワークスペースB(プロジェクト外部収容の場合;ソースファイルを外から持ち込む場合)
    1. プロジェクト1(≒1つの実行プログラムを作るための単位。ソースは単一ファイルかも知れないし複数ファイルかもかもしれない)
    2. プロジェクト2(同上)
    3. プロジェクト3(同上)
    4. ‥‥

ファイル階層としても、ほぼ同じになります。
ワークスペースがプロジェクトを直接収容する場合、各プロジェクトについて考えると、ファイル階層は以下の様になります。


一方で、ワークスペースがプロジェクトを外部収容する場合、以下の配慮が必要です。
その上で、ワークスペースがプロジェクトを外部収容する場合、各プロジェクトについて考えると、ファイル階層は以下の様になります。

なお、この場合、プロジェクト名のディレクトリ内にはEclipseが作る様々なファイルも置かれるようになることに注意してください。
本講義では後者の外部収容式で説明します。

Eclipseの作業概念

C言語では下記2つのパースペクティブを行ったり来たりします。

  1. C/C++ : C言語プログラムの開発環境(≒emacs)
  2. デバッグ : C言語プログラムの開発環境(≒gdb;実際にはgdbのラッパー)

2. Eclipse環境でweek1の内容を再度実行

2.1 Hello ESYS のまともな形をもう一度

week1の1.2節(のよいほう)のと同じです。
ソース:ic2-week1-HelloESYS-Better.c
ターゲットディレクトリ:$HOME/2011ic2-workdir/week2/21-HelloESYS
ターゲット名:HelloEYS-Simple


2.2 Eclipse 起動!

多少初期化します。

その上で、以下の作業を行います。
この作業のうちに、いろいろEclipseの便利機能について説明します。
これには、パースペクティブの切り替え、パースペクティブの戻し方、デバッガの使い方等が含まれます。

  1. プロジェクトの登録 (はじめのうちはプロジェクト名は、main()を含むソースファイルの .c を抜いたものにしておいてください。debugの時に面倒になります)
  2. ソースの編集(と自動コンパイル)
  3. デバッガ起動準備
  4. デバッガ開始・実行(デバッガへパースペクティブ切り替え)
  5. デバッガ終了
  6. ソースの編集(C/C++へパースペクティブ切り替え)
  7. デバッガの開始・実行・終了
  8. ソースの編集
  9. デバッガの開始・実行・終了
  10. ‥‥
  11. 端末でターゲットディレクトリに行って直接実行
    $ 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

  1. プロジェクトの登録
  2. ソースの編集(と自動コンパイル)
  3. デバッガ起動準備
  4. デバッガ開始・実行
  5. デバッガ終了
  6. ソースの編集
  7. デバッガの開始・実行・終了
  8. ソースの編集
  9. デバッガの開始・実行・終了
  10. ‥‥
  11. 端末でターゲットディレクトリに行って直接実行

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

  1. プロジェクトの登録
  2. ソースの編集(と自動コンパイル): Eclipseは自動的にどれがmain()を含むファイルか判断してコンパイル・リンクを適切に行ってくれます
  3. デバッガ起動準備
  4. デバッガ開始・実行
  5. デバッガ終了
  6. ソースの編集
  7. デバッガの開始・実行・終了
  8. ソースの編集
  9. デバッガの開始・実行・終了
  10. ‥‥
  11. 端末でターゲットディレクトリに行って直接実行

3. OpenGLでのプログラミング

今年からは、昨年までと違って、先に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つ前からの差分です)


課題2. 2011/10/24出題分

課題はいずれも2011/10/31,13:30 (JST)提出締切である。


kameda[at]iit.tsukuba.ac.jp, 2011.