/** * floatであらわされる色構造体 */ struct FRGB{ float r,b,g; static FRGB *Set(FRGB *out, unsigned char r, unsigned char g, unsigned char b); }; /** * 自作マテリアル構造体 */ struct Material{ FRGB diffuse;//拡散反射光係数 FRGB ambient;//環境光係数 FRGB specular;//鏡面反射光係数 FRGB transmit;//透過係数 };透過係数は、0~1で定義される透明度。0の時は光を一切通さず、1の時は完全に光を通す(=透明となる)ものとする。
- 始点から画素方向へ向かって飛ばしたレイが、空間内に配置されたオブジェクトと衝突するかどうか調べる。
- 衝突しない場合は、画素に背景色を適用する。
- 衝突する場合は、始点に最も近い交点の座標を求め、再度交点からレイを発射する。
- 再発射したレイがオブジェクトと衝突している場合はここで、環境光・拡散反射光を求める。この値にレイを発射したオブジェクトの透過率を掛けて最終的な画素色とする。
明日はこのあたりの改善+屈折に入っていこう。苦手な再帰呼び出しをいかに克服するかがポイントになりそうだ。
0 件のコメント:
コメントを投稿