public bool IsShadowed(ILight light, Tuple4 pointOverSurface) { var lightDir = light.GetLightDirection(pointOverSurface); if (!lightDir.Equals(Tuple4.ZeroVector)) { var lh = CalculateIntersection(Tuple4.Add(pointOverSurface, Tuple4.Scale(lightDir, Constants.Epsilon)), lightDir); if (lh.IsHit) { var distance = light.GetLightDistance(pointOverSurface); if (lh.Distance < distance) { return(true); } } } return(false); }