public static Vector3 Color(ref Ray r, ref Scene world, uint depth)
 {
     if (world.Hit(r, 0.001f, float.MaxValue, out HitRecord rec))
     {
         if (depth < 50 && rec.Material.Scatter(ref r, ref rec, out Vector3 attenuation, out Ray scattered))
         {
             return(attenuation * Color(ref scattered, ref world, depth + 1));
         }
         else
         {
             return(Vector3.Zero);
         }
     }
Example #2
0
 public Vector3 GetColorValue(Ray ray, Scene scene, int depth)
 {
     if (scene.Hit(ray, 0.001f, float.MaxValue, out HitRecord rec))
     {
         if (depth < 50 && rec.material.Scatter(ray, rec, out Vector3 attenuation, out Ray scattered))
         {
             return(attenuation * GetColorValue(scattered, scene, depth + 1));
         }
         else
         {
             return(Vector3.Zero);
         }
     }
Example #3
0
 public Vector3 GetColorValue(Ray ray, Scene scene, int depth)
 {
     if (scene.Hit(ray, out HitRecord rec))
     {
         if (depth < maxDepth && rec.material.Scatter(scene, ray, rec, out Attenuation attenuation, out Ray scattered))
         {
             if (attenuation.attenuationType != AttenuationType.None && attenuation.forceToDoAnotherPass)
             {
                 return(attenuation.BlendWith(GetColorValue(scattered, scene, depth + 1)));
             }
             else
             {
                 return(attenuation.color);
             }
         }
         else
         {
             return(scene.ambientColor);//Vector3.Zero;
         }
     }