Conputer Graphics 演習課題



問3 凸多面体を例とレーシングで描画する


実装にはjavaを利用。

視点からレイを飛ばし、原点に置かれたCubeとの交差を判定し、またその明るさを計算してframeに描画する。

アプレット版: applet
ソース: RayTrace.zip


視点は、位置(0,0,6)、注目方向(0,0,0)
スクリーンは、xy平面に平行で、中心が、(0,0,2)
画角はフレームの幅により可変。(初期フレーム幅250ピクセルでは約45度)

視点は固定で、マウスのドラッグにより、インタラクティブにCubeを回転させる。
Cubeの回転には、真面目に4×4行列を利用した。


レンダリングのモードは3種類あり、メニューバーから選べる。

・Colorモードは、Cubeの各面に色を定義しておき、それを表示するもの。

・Point Lightモードは、位置(1,1,7)に点光源をおき、拡散反射の強さを計算(法線とコサインを取っただけ)することにより、明るさを決定した。
ただし、この点光源は、光の減衰を仮定していない。位置は適当に決めた。

・Para Lightモードでは、方向(0,0,-1)の平行光源を仮定して、各ピクセルの明るさを決定した。
ここでも、各面の法線ベクトルと、光の方向ベクトルとのコサインを取ることにより、明るさを計算している。


システム概観図(あまり大きくするとインタラクティブに動きません・・・)


左から, Colorモード、点光源モード、平行光モード。
(一見、右二つの違いは分かりませんが、よーくみると、点光源モードでは、面の明るさが一様ではないです。)


[home][課題top]