T プログラミング課題インタラクテイブ性のあるプログラムが理想であり、それを遠隔地でも評価するにはJavaで作成すると効果的であるので、可能な人はできるだけJavaを試みなさい(この場合画像サイズは300x300以下でもよい)。 X-WindowあるいはOpenGLを用いてスクリーン上に表示する方法でもよい。この際、出力例がカラー画像の場合、それを評価して欲しい人は自分のホ ームページに画像を置いて見れるようにしても良い。
課題1 Bezier曲線を描くプログラムを作成せよ(資料[1]参照)。
- n次のBezier曲線を、曲線を分割する方法で描画せよ。
- 上と同じ曲線を次数を上げて表現して描画せよ(資料[1]の"Properties of the Bezier curves"を参照)。
- 有理Bezier曲線(制御点数6として)を用いて真円を描画せよ(資料[1]の"Rational Bezier curves"を参照)。
課題2 OpenGL(あるいはjGL, GL4java)を用いて3次元物体を表示せよ。
- 3次元物体(ポリゴンで構成されている)としては正四面体・立方体・正八面体・正二十面体のどれかとせよ。
- 3次元物体をワイヤーフレーム(線画)表示せよ。
- 各ポリゴンの法線および各頂点での法線を計算せよ(資料[2]のp.12を参照せよ)。
- ポリゴンの各頂点において以下の式によって輝度を計算せよ(資料[2]のp.5"Illumination model 3"を参照せよ)。光源は平行光源とする。
- ポリゴンのシェーディング処理をせよ。このとき、各頂点の輝度を関数glColor3fで与え、ポリゴン内部はGouraud Shading(関数glShadeModel(GL_SMOOTH)を使用)せよ。
(関数glColor3f(GLfloat r, GLfloat g, GLfloat b)は輝度のrgb値を0.0から1.0までの浮動小数点値を引数として渡すことで頂点の輝度を与える関数である)
- jGLの使用方法については/~robin/jGL/を参照せよ。
- GL4javaの使用方法についてはhttp://www.jausoft.com/gl4java.htmlを参照せよ。
- OpenGL(あるいはjGL, GL4java)が使用できない場合には、多角形の塗りつぶし(色の補間にはGouraud Shadingを使用)せよ。
課題3 レイトレーシング法を実装せよ。
- 物体としては、球(あるいはトーラス・円柱・円錐)と平面のみとしてよい。
- シェーディングにはPhongシェーディングを使用せよ(資料[2]参照)。光源は平行光源とする。
- 物体にテクスチャをマッピングせよ。マッピング方法としては平面投影、球投影、円柱投影のそれぞれについて行い、結果を比較せよ(資料[3]参照)。
Phong shading
平面投影
球投影
円柱投影課題4 球をボリュームレンダリングとして描画せよ。
- 不透明な球をボクセルで表現して、それを3次元テクスチャーとして任意の方向から見た投影図を描画せよ
(透視投影は /~nis/CG/cgtxt/cg2/cg026.htm 参照)。
なお、視線に垂直なスライスの重ねがきで表現する(資料[4]の"3D Textures"を参照せよ)。- 上の球を半透明物体として描画せよ。ただし、球の内部は一様の密度(透明率)とする。
- 2つの半透明球が2つひょうたん状に重なっている形状を描画せよ。
ただし、球の中心からの半径の関数(ガウス分布)で密度が与えられているものとする。参考資料
[1] A. Iglesias, "BEZIER CURVES AND SURFACES"
[2] A. Iglesias, "ILLUMINATION MODELS"
[3] A. Iglesias, "TEXTURE AND BUMP MAPPING"
[4] C.R. Salama, "Hardware-Accelerated Volume Rendering for Rectlinear Grids"
U レポート課題
参考
- 2次のBezier曲面Cと直線Lとの交点を算出する式を導出せよ 。また、交点 での法線を算出せよ。
- ボリュームデータの可視化の方法にMarching Cubesという方法があるが、 この方法について説明し、長所欠点を述べよ。
- 放物線を2次の有理Bezier曲線で表す場合、制御点と重みを算出する式を 求めよ。
C言語の場合;
これらの課題において、画像をセーブすることが必要になるが、保存の画像形式およびそのプログラムは下記を参考にして下さい。
/~nis/junk/ppm.html
Java の場合;
Java文法は下記を参照。
/~nis/junk/sougou/document/javaBunpou.htm
Java例題
CG関係のJava Aplet例
(1) Javaの図形基本要素を組み合わせた例: Applet例 プログラム例 (2) 矩形領域内を補間法で塗る例: Applet例2 (3) ブレゼンハムの直線描画法の例: Applet例, プログラム例、 解説 (直線を描くコマンドが無い場合に、直線を描く場合、直線上の画素を走査するようである。その際不可欠な方法)
締切: 2月16日(月曜)17時まで
結果は印字(ソースリストと表示結果)して情報科学科事務室(田村さん)に提出か、各自のホームページに置いてメイル連絡すること。
連絡先: email: nis@is.s.u-tokyo.ac.jp
電話:内線2-4106 (西田研究室)
/~nis/
本課題の公開URL: /~nis/junk/lecture/VisRep04.html
本講義の公開URL: /~nis/junk/cg_lectur.html