実装内容:
- GLSL Sandbox を使用してレイトレーシングを1から実装
- カメラからレイを⾶ばして各物体との交点を計算
- 入射光の輝度が1のときのランバート反射と鏡面反射を簡単に計算して物体の色を表示(正しい計算式ではない)
- 反射回数は3に設定
- 球,三角形,平面,円錐との交点の計算
- マウスの位置に応じて真ん中の灰色の球が移動
- カメラが同じ高さで等速円運動しながら移動
- ソースコードはこちらにも掲載
物体の変更・追加・移動:
- const int OBJ_NUM を作成したいオブジェクトの個数に変更する
- main 関数内に objects[i] = (物体) のようにして物体を生成(物体は以下のものを指定可能)
- 球:create_sphere(vec3 中心座標, float 半径, vec4 色)
- 三角形:create_triangle(vec3 点a, vec3 点b, vec3 点c, vec4 色)
- 平面:create_plane(vec3 平面上の1点a, vec3 法線ベクトル(大きさは不問), vec4 色)
- 円錐:create_cone(vec3 底面の円の中心座標, vec3 底面の中心から頂点へのベクトル(大きさは不問), float 底面半径, float 高さ, vec4 色)
その他設定の変更:
- 点光源の位置:const vec3 PLS = vec3(5,0,8); の(5,0,8)を変更
- 反射回数:const int REFL_NUM = 3; の3を変更
- ランバート反射の輝度:const float IL = 1.0; の1.0を変更
- ピンホールとフィルムの距離:float l = 2.0; の2.0を変更
- フィルムの横幅(縦幅は解像度に合わせて自動で指定):float film_w = 5.0; の5.0を変更
- カメラ(ピンホール)位置:vec3 c_from = vec3(sin(time*0.1)*10.0,cos(time*0.1)*10.0,6); の(sin(time*0.1)*10.0,cos(time*0.1)*10.0,6)を変更
- カメラの向いている先:vec3 c_to = vec3(0,0,0); の(0,0,0)を変更
- カメラのUPベクトル:vec3 c_up = vec3(5,0,10); の(5,0,10)を変更