2011年11月17日

屈折ベクトルについて

いつの間にか11月も半分終わって年末が近づいていますね・・・。

レイトレーシングのテストでは、反射(reflect)だけ計算して、屈折(refract)の計算をしていませんでしたので、試してみることにしました。

スネルの法則に従って計算すればいいようです。

参考サイト
[1] Snell's law - Wikipedia: ttp://en.wikipedia.org/wiki/Snell's_law
[2] t-pot: ttp://www.t-pot.com/program/96_RayTraceReflect/index.html
[3] imHo: ttp://d.hatena.ne.jp/mokehehe/20090719/refraction

GLSL等ではreflectやrefract関数が用意されているため、自分で実装する必要はありません。

屈折率の関係で全反射が起こるのが少しややこしいですね。

実行結果

とりあえずz=0として2次元的にやってみました。



青い部分の絶対屈折率?が1.5で、緑の部分が2.2、白い部分が1.0としています。
青い線が反射ベクトル、赤い線が屈折ベクトル、黒い線が当たった面の法線ベクトルです。
再帰回数は反射が最大6回、屈折も最大6回にしていて、反射ベクトルが当たったときは反射ベクトルと屈折ベクトルの両方を生成していますが、屈折ベクトルが当たったときは屈折ベクトルしか作っていません。
全反射もしているので多分正しく計算できていると思います。
いろいろ当たって最終的な色をどう決めればきれいに見えるんでしょうかね。

web拍手 by FC2
posted by シンドラー at 02:45 | Comment(0) | TrackBack(0) | OpenGL & Metasequoia | このブログの読者になる | 更新情報をチェックする