ビジュアル情報論課題
プログラミングを習っていない学生もあるので、次のような選択課題とする。プログラミング可能な学生は、下記のプログラミング課題3問を提出する(例えば課題1、課題2の(2)、課題3の(2)の組み合わせ)。また、プログラミングが困難な学生はレポート課題の全問を提出すること。
T プログラミング課題
X-Windowを用いてスクリーン上に表示するのが理想であるが、X-windowを使用方法は知らなくてもできる方法とする。すなわち、スクリーンを想定した配列を準備し、それに輝度情報を書き込み、準備したツールで可視化する。画像サイズは500x400程度とする。ただし、プログラムリストと結果のハードコピー(PostScript形式にし印字)を提出すること。 なお、インタラクテイブ性を遠隔地でも評価するにはJavaで作成すると効果的であるので、可能な人は挑戦して見てください(この場合画像サイズは300x300以下でもよい)。あるいは、出力例がカラー画像の場合、それを評価して欲しい人は、自分のホームページにおいて見れるようようにしても良い。
課題1
. 2次元多角形の走査変換(scan conversion)のプログラムを作成せよ。
塗りつぶしの問題である。走査変換にはyソートテーブルを用いる方法や、バケットソートを用いる方法などがあるが、どんな方法でもよい(教科書118頁のソートテーブルを用いる方法、または119頁のバッケットソートを用いる方法などを参考)。
凹多角形も走査変換が可能なものとする。
頂点座標はファイルから入力しても、マウス等で会話的に入力してもよい。
課題2
. データ作成の例として、次のいずれかを選択し、線画(ワイヤーフレーム表示)で表示せよ。
(1) 3次
Bezier曲面を作成し、それを4辺形に分割(1つの曲面をmxmに分割)せよ。
Bezier曲面でよい。この場合、いくつかの曲面パッチで表現する。次数n(ここでは3)および(n+1)x(n+1)個の制御点の(x,y、z)座標を入力する。すなわち、1つのパッチは16個(4x4)の制御点で構成されるので、これらの3次元座標を与える。例題として、球を表現する場合の制御点の座標を付録に示す。球を表現するのには8パッチ必要であるが、有理Bezierで無い限り正確な球ではないことに注意。なお、球は一例であるので、各自自由にデータを作成するのが好ましい。
分割数Nは指定する方式で、一つの曲面パッチはNxNに分割するものとする(例えばN=4)。分割方法は次のようにいくつかあるので、これらの内効率の良いと思うものを選択すること。a)曲面を4分割し、さらに分割された曲面パッチを4分割する操作を繰り返す。これは、u成分を2分して2つの曲面を出力する関数と、v成分を2分して2つの曲面を出力する関数を準備し、これらを組み合わす。b)曲面上の4点(多角形化した際の4頂点に相当)を計算し、これらの4点で構成される面を利用する。この4点はパラメータ空間において、例えば(ui,vi), (ui+1/N,vi), (ui+1/N,vi+1/N), (ui,vi+1/N) である。 c)まずu成分について、曲面をバンド状(1/Nの幅)に切り出し、各バンドについてv成分についてN等分する。
曲線上の点の座標を計算する方法は種々あるが、de Castljau(配布資料参考)の分割法を用いる方法を用いよ。
(2) フラクタルを用いて山を作成せよ。
- 初期値としてはnxnの格子点の高さを入力する(n=3)。
- 中点変位法により、再帰的に小さな4辺形の集合による複雑な形状を作成する。なお、80x80程度のメッシュになる程度に分割する。
課題3
. 次のいずれかの方法で、3次元物体を隠面消去して表示せよ。
(1)
Zバッファ法を用いた隠面消去プログラムを作成せよ。
- 多面体または曲面は4辺形の集合で表現されているもの(課題2で作成したもの)を対象とする。
- 各頂点と面の構成頂点を記憶する配列が必要である。
- 投影法としては、透視投影を用いる。3次元を2次元に投影して表示するための透視投影は教科書
p.35を参照のこと。 透視図を書くため、視点と注視点を与える。簡単のため、視点はz軸上に置いてもよい。この場合物体の回転を施せるようにする。
- 投影された頂点で構成される面の表示には、多角形の塗りつぶし(走査変換)が必要であるが、これは課題1を利用すること。
- 各画素における奥行きzの計算は、なるべく増分法を使用して計算量を減少させること。
- 各面の色は隣接する面の境界が分かるように適当に与えてもいいが、光線方向を与え拡散反射による輝度の変化を与えてもよい。
(2)多角形で構成される3次元物体に対するレイトレーシングプログラムを作成せよ
- 多面体または曲面は4角形または3角形の集合で表現されているものを対象とする。課題2で作成したものを利用する。
- 視線と多角形を含む面との交点をまず算出し、その点が多角形の内部にあるかどうかを判定する。内外判定は2次元平面に投影して行う方法が効率がよい。
- 3角形を対象にしたのは視線と3角形を含む平面との交点が3角形内部にあるかの判定が容易になるためである。
- 反射(映り込み)も処理できるものとする。
(3) 球および楕円体に対するレイトレーシングプログラムを作成せよ。
- 本Graphics GEMに掲載されている、最小の長さのプログラム(minimalray)を参考にし、これを変形し、楕円も可能にする。 http://www.eml.hiroshima-u.ac.jp/~nis/prog/raysph.c 参照
- 反射、屈折に加え、影も付くよう修正を加えよ。
注:
課題2において、投影された曲線は線分で近似して描画するが、線分を書く関数が準備されていない言語で描画する場合、線分を表示する関数は、添付資料のプログラムを参照のこと(ブレゼンハムの直線描画法)。
課題3において、分割した多角形を同じプログラムで隠面消去してもいいし、課題2での結果を一旦ディスクに書き込み、課題3のプログラムで表示してもよい。なお、JAVAを利用する場合はディスクに書き込みは困難であるから、前者の方法とする。
U レポート課題
1. 隠面消去の方法を分類し、その特徴を述べよ。
2. 3次元物体を3角形に集合で表現する場合のレイトレーシング法において、視線と3角形の交差判定の方法を算出せよ。また、交点での法線ベクトル、反射方向の求め方も算出せよ。なお、視点位置をPv、視線の単位ベクトルをV、3角形の構成頂点をPi(,i=1,2,3)として求めよ。 視線と3角形を含む平面との交点が3角形内部にあるかどうかの判定は、2次元に投影後でも3次元空間で行ってもよい。
3. Gouraud(グロー)のスムースシェーディングは、2頂点での輝度を線形補間する方法を組み合わせて、多角形内の任意の点での輝度を求める。この方法の場合、多角形を回転(例えば45度)すると、多角形内の同一点での輝度が変化してしまうことを数式を用いて説明せよ。
4.
光の相互反射を計算することによって、リアルな画像を生成するRadiosity法が注目されている。この方法は100を超える論文が発表されるほどであるが、可能な範囲でいいが最近提案された方法を調査分類せよ(学会誌やWebで調査)。
締切:
8月17日(月曜) 学科事務室に提出(担当 安住)
連絡先: email: nis@eml.hiroshima-u.ac.jp
電話:0849-30-2001(西田研究室直通)
http://www.eml.hiroshima-u.ac.jp/~nis
参考:
Webでの課題公開
http://www.eml.hiroshima-u.ac.jp/~nis/junk/TouRep98.html
表示プログラム例:
http://www.eml.hiroshima-u.ac.jp/~nis/javaexampl/zbuf/ZbufSurf.html
http://www.eml.hiroshima-u.ac.jp/~nis/javaexampl/tpot.html
下記で紹介しているCDROM中のデータを利用してもよい。
http://www.eml.hiroshima-u.ac.jp/~nis/cgtext.htm
複雑理工学専攻
http://www.k.u-tokyo.ac.jp/complex/labs.htm
付録1:Bezier曲面の例
原点中心の半径1の球である。
球のデータは上記のWebから入手可能(こちら)です。