diff --git a/__pycache__/operation_vector.cpython-33.pyc b/__pycache__/operation_vector.cpython-33.pyc index 200dee8539d5beca61dbe0c0a5cc3b84ef2dcba1..6985a18e0b64f2524fb9bd0aa6ba3ed8b3334944 100644 Binary files a/__pycache__/operation_vector.cpython-33.pyc and b/__pycache__/operation_vector.cpython-33.pyc differ diff --git a/__pycache__/raytracer.cpython-33.pyc b/__pycache__/raytracer.cpython-33.pyc index d438c668c55e9e716dd620b8256fd685dab4b5db..30618db9ed94af2cbefc1ffb44ebb596ab27ebfc 100644 Binary files a/__pycache__/raytracer.cpython-33.pyc and b/__pycache__/raytracer.cpython-33.pyc differ diff --git a/raytracer.py b/raytracer.py index fe34768add2db921f28bc0fd4393e2577df39d74..e6b7538254ee496b7c3c805b0bc90ac9d441a56c 100644 --- a/raytracer.py +++ b/raytracer.py @@ -22,7 +22,8 @@ def trace_ray(ray, scene, camera): return Vector([0,0,0]) color = ambiant_illuminate(class_intersect.position, class_intersect.object) for light in scene.light_list: - color += phong_illuminate(light, class_intersect.position, class_intersect.normal, class_intersect.object, Vector([0,0,0])) +# color += phong_illuminate(light, class_intersect.position, class_intersect.normal, class_intersect.object, Vector([0,0,0])) + color += compute_light(light, scene, class_intersect, Vector([0,0,0])) color_object = class_intersect.object.material.color c_x, c_y, c_z = color.coord() return Vector([max(min(c_x, 1), 0), max(0, min(c_y, 1)), max(0, min(c_z,1))]) @@ -37,3 +38,15 @@ def raytracer_render(camera, scene): color = trace_ray(ray, scene, camera) affiche[i,j,:] = color.coord() return affiche + +def compute_light(light, scene, intersection, viewer): + ray = Ray(light.position, (intersection.position - light.position).normalized()) + distance = (intersection.position - light.position).norm() + distance_limit = distance*.99 + for o in scene.object_list: + resultat = intersect(o, ray) + if resultat != None: + d = (resultat.position - ray.starting_point).norm() + if d < distance_limit: # si un objet est dans la trajectoire du rayon + return Vector([0, 0, 0]) + return phong_illuminate(light, intersection.position, intersection.normal, intersection.object, viewer)