问题代码如下 为Bound3.hpp中的 IntersectP
double t_x_min = (pMin.x - ray.origin.x)*invDir[0];
double t_x_max = (pMax.x - ray.origin.x)*invDir[0];
double t_y_min = (pMin.y - ray.origin.y)*invDir[1];
double t_y_max = (pMax.y - ray.origin.y)*invDir[1];
double t_z_min = (pMin.z - ray.origin.z)*invDir[2];
double t_z_max = (pMax.z - ray.origin.z)*invDir[2];
//计算出了每个包围盒的对面的tmin和tmax
//now we should judge the tmin and tmax according to the light's dirctions
if(!dirIsNeg[0]){
//光线不是正方向的 tmin和tmax反一下
double tmp = t_x_min;
t_x_min = t_x_max;
t_x_max = tmp;
}
if(!dirIsNeg[1]){
//光线不是正方向的 tmin和tmax反一下
double tmp = t_y_min;
t_y_min = t_y_max;
t_y_max = tmp;
}
if(!dirIsNeg[2]){
//光线不是正方向的 tmin和tmax反一下
double tmp = t_z_min;
t_z_min = t_z_max;
t_z_max = tmp;
}
float t_enter = std::min(t_x_min,std::min(t_y_min,t_z_min));
float t_exit = std::max(t_x_max,std::max(t_y_max,t_z_max));
if(t_enter < t_exit && t_exit > 0){
return true;
}
else{
return false;
}