public Vector3 Trace(Ray ray, Sphere sphere) { Vector3 ambient = new Vector3(0.2f, 0.8f, 0.5f); Hit hit = new Hit(); if (sphere.Intersect(ray, ref hit, 0.001f)) { Vector3 LightDir = _lightPosition - hit._point; LightDir.Normalize(); float attenuation = 1f / (LightDir.Length * LightDir.Length); LightDir.Normalize(); return(attenuation * DiffuseLighting(hit._normal, LightDir)); } return(ambient); }
public Vector3 Trace(Ray ray, Sphere sphere) { Vector3 ambient = new Vector3(0f, 0f, 0f); Hit hit = new Hit(); if (sphere.Intersect(ray, ref hit, 0.001f)) { Vector3 lightDir = lightPosition - hit.point; lightDir.Normalize(); float attenuation = 1f / (lightDir.length * lightDir.length); Vector3 lightDir2 = lightPosition2 - hit.point; lightDir2.Normalize(); float attenuation2 = 1f / (lightDir2.length * lightDir2.length); return(attenuation * DiffuseLighting(hit.normal, lightDir) + attenuation2 * DiffuseLighting2(hit.normal, lightDir2)); } return(ambient); }