課題
下記のプログラミング課題2問(課題1,2は選択)を提出して下さい。
プログラミング課題
インタラクテイブ性のあるプログラムが理想であり、それを遠隔地でも評価するにはJavaで作成すると効果的であるの
で、可能な人はできるだけJavaを試みて下さい(この場合画像サイズは300x300以下でもよい)。 OpenGLあるいはX-Windowを用い
てスクリーン上に表示する方法でもよい。この際、出力例がカラー画像の場合、それを評価して欲しい人は、自分のホ
ームページに画像を置いて見れるようにしても良い。
課題1. ガスケットの描画において、例(配布資料[1])では線画で描かれるが、3角形内を色を付けて塗りつぶすように変更せよ。
- 分割後の中央の3角形ではなく、3隅の3角形を塗りつぶす(例えば赤色で)ものとする。
- オリジナルでは、中央の3角形を再帰的に描画する形式なので、このままdrawPolygonをfillPolygonにするのみでは実現できない。
課題2. 多面体のワイヤーフレーム表示において、次の条件を満たすように改良せよ。
- 練習問題では、面と頂点がクラスとして定義してあるが、立方体も新たにクラスとして定義し、複数の立方体を生成して表示しなさい。
- 基本的にはコピーして平行移動することにより複数とするが、一つ一つはサイズ(x、y、zの倍率が異なる)や方向(回転)が異なること
(物体ごと色を変えても良い)。
多面体を描画する際に辺の2度描きを避けるように改良せよ。
- 物体のクラスを定義し、その配列を準備することで複数処理が可能とする。
- 物体のクラスに、x、y、z方向のサイズ変更、移動、回転のメソッドを準備する(座標変換はここを参考)。
- 2度描きを避ける簡単な方法は、辺の2端点の頂点番号の値(大小)のみで判定する方法がある。
課題3 ラジオシティ法についてテストプログラムを作成せよ。
- 2次元の場合でプログラミングすればよい。図(a)のような簡単な室内をいくつかに分割して、各エレメント間のフォームファクタを計算し、それを用いてエネルギの授受を計算し、室内の光の分布を求めよ。
- 2次元の場合、下記のフォームファクタの定義式における分母の距離は2乗ではなく、1次となる。
- 解法としてガウスザイデル法を始め色々な方法があるので、各自が効率のよいと思う方法で解け。
たとえば、モンテカルロ法やプログレッシブリファインメント法(文献[2,3]参照)を利用してもよい。なお、ガウスザイデル法等の比較を加えてもよい。
- 障害物(図のように線分で表現してよい)を挿入し、その影響を調べる。各面での光の分布は、図(b)のようにグラフで表示してもよい。
- 各面の反射率は任意に与えて下さい。天井、壁、床、窓の各々の反射率を入力できるようにする。また各面の分割数(あるいは幅)も指定できるものとし、分割数による精度について比較検討できるとよい。
- 鏡面反射成分を効慮すると複雑になるので、拡散反射のみでよい。
- 光源は点光源とするか、分割した1つのエレメントを発光面とみなしてもよい。
注: 2問中1問は自由課題に置き換えてもよいが、その場合ある程度完成度の高いものとする。
あるいは、プログラミングが困難な学生は相談に応じてレポート課題(メイルで問い合わせ)を提出すること。
参考
- Java の場合;
- C言語の場合;
これらの課題において、画像をセーブすることが必要になるが、保存の画像形式およびそのプログラムは下記を参考にして下さい。
/~nis/junk/ppm.html
- 参考資料
- [1] java文法および例題の説明
- [2] P.Shirley," Hybrid radiosity/Monte Carlo Methods" SIGGRAPH94 Course Note pp.11.1 - 11.23
- [3] "Radiosity Matrix Solution"SIGGRAPH94 Course Note pp.19-36
- [4] 中前、西田 「3次元コンピュータグラフックス」昭晃堂
締切: 8月20日(月曜)17時まで
各自のホームページに置いてメイル連絡するか、ファイルを添付してメイルする。 また、結果を印字(ソースリストと表示結果)して金田先生に17日までに提出してもよい。
に提出か、
連絡先: email: nis@is.s.u-tokyo.ac.jp
/~nis/
本課題の公開URL:
/~nis/lecture/HiroRep01.html
例題解説
・ 例題1:ブレゼンハムの直線描画
(マウスで2端点指定,増分法)
プログラム例
Applet例,
(簡略版; プログラム例1
Applet例1)
/~nis/javaexampl/javtool/Bresen.html
・ 例題2:シルビンスキーのギャスケット
(自己相似、再帰法)
プログラム例,
Applet例
・ 例題3:3Dデータのワイヤーフレームモデルの表示
(データ構造、透視変換)
プログラム例
Applet例
・ 例題4:一価関数の隠線表示
プログラム例,
Applet例
/~nis/javaexampl/curve/hidfunc.htm
・例題実習
(参考; JavaGraphics基本例;
プログラム例1,
Applet例
,
プログラム例2,
Applet例
)