我的光线反射看起来很奇怪

时间:2013-09-25 08:30:41

标签: c++ raytracing

我正在学习光线追踪,我将反射添加到我的光线追踪中。但是球体的反射看起来很平坦。我不知道为什么。

我渲染了标准化反射和彩色图像。希望有人能帮助我。感谢。

反思代码:

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();

        }
    }  
 ....

reflecting direction enter image description here

最后我得到了正确的反思。

问题出在这里      Vect reflect_dir = (dir +2*win_obj_normal).normalize();
这将使reflect_dir几乎与对象的法线方向相同 我更改了reflect_dir计算的公式并获得了正确的结果     Vect reflect_dir = (dir-2*dir_normal*obj_normal).normalize(); enter image description here

0 个答案:

没有答案