RayTracer Shadow Function

PHOTO EMBED

Fri Mar 31 2023 19:37:42 GMT+0000 (Coordinated Universal Time)

Saved by @gabbi #c++

        bool in_shadow(Surface* surface) {
            // check if ray from surface to light , hits light or is stopped by an object
            Eigen::Vector3f light_direction = (this->light_point - surface->point).normalized();
            Ray shadow_ray = Ray(surface->point, light_direction);
 
            float x = (this->light_point.x() - surface->point.x()) * (this->light_point.x() - surface->point.x());
            float y = (this->light_point.y() - surface->point.y()) * (this->light_point.y() - surface->point.y());
            float z = (this->light_point.z() - surface->point.z()) * (this->light_point.z() - surface->point.z());
            
            float distance_bw_light_point = std::sqrt(x + y + z);
 
            for (const auto& s : get_surfaces()) {
                if (s != surface && s->ray_intersection(shadow_ray) && ((s->point - surface->point).norm() <= distance_bw_light_point)) { return true; }
            }
            return false;
        }
content_copyCOPY

include in raytracer light class to determine if an intersection point is in shadow or not