レイトレーシングを学んでいて、レイトレーシングに反射を追加していますが、球の反射が平らに見えます。理由はわかりません。
正規化された反射とカラー画像をレンダリングしました。誰かが私を助けてくれることを願っています。ありがとう。
リフレクションのコード:
Color getColor( Vect pos,Vect dir,const vector<Source*> &lights,const vector<Object*> &objects,double ambient,int index,double accuracy,int deep){
Color win_obj_color = objects[index]->getColor();
Vect win_obj_normal = objects[index]->getNormalAt(pos);
Color final_color(win_obj_color*ambient);
double dir_normal = win_obj_normal*dir;
if (dir_normal >0) return final_color;
Vect reflect_dir = (dir +2*win_obj_normal).normalize();
if (objects[index]->reflectivity()>0 && deep>0) {
Ray reflect_ray(pos,reflect_dir);
vector<index_line> reflection_detection = check_intersections(objects,reflect_ray,accuracy);
if (reflection_detection.size()!=0) {
//final_color+=Color(reflect_dir);
final_color += getColor(reflect_ray.origin+reflect_ray.direction*reflection_detection[0].distance,reflect_ray.direction,lights,objects,ambient,reflection_detection[0].index,accuracy,deep-1)*(-dir_normal)*objects[index]->reflectivity();
}
}
....
最後に、正しい反射が得られます。
ここでの問題は
Vect reflect_dir = (dir +2*win_obj_normal).normalize();
、reflect_dir がオブジェクトの法線方向とほぼ同じになることです。
Reflect_dir 計算の式を変更し、正しい結果を得ました
Vect reflect_dir = (dir-2*dir_normal*obj_normal).normalize();