Skip to content
Snippets Groups Projects
Select Git revision
  • 632b11c8cddc0be6883bbb10335968e55e588792
  • master default
2 results

script_reflection.py

Blame
  • script_multiprocessing.py 1.64 KiB
    # Show to python where to find the modules
    import sys
    sys.path.append('..')
    
    from camera import Camera
    from scene import *
    from light import *
    from raytracer import *
    import numpy as np
    from matplotlib.image import imsave
    import itertools
    import multiprocessing
    
    def trace_ray_mutliprocess(t):
        (i, j, camera, scene, nb_reflexion) = t
        return np.array(trace_ray(camera.ray_at(i, j), scene, camera, nb_reflexion).coord())
    
    (nx, ny, nb_reflexion) = (1000, 1000, 20)
    camera = Camera(nx, ny, 1)
    materiau_sphere_bleue = Material(Vector([0,0,1.]), .5, .5, .5, 1000,.1)
    materiau_sphere_verte = Material(Vector([0,1,0]), .5, .5, .5, 1000, .6)
    materiau_sphere_rouge = Material(Vector([1,0,0]), .5, .5, .5, 1000, .3)
    materiau_sphere_blanche = Material(Vector([1,0,0]), .5, .5, .5, 1000, .7)
    sphere_verte = Sphere(Vector([3,-3,4]), 2.5, materiau_sphere_verte)
    sphere_bleue = Sphere(Vector([0,0,3]), .8, materiau_sphere_bleue)
    sphere_rouge = Sphere(Vector([.5,.5,2]), .5, materiau_sphere_rouge)
    sphere_blanche = Sphere(Vector([0,0,0]), 25, materiau_sphere_blanche)
    scene = Scene()
    lumiere = Spotlight(Vector([1,1,0]), Vector([1,1,1]))
    scene.add_object(sphere_bleue)
    scene.add_object(sphere_rouge)
    scene.add_object(sphere_verte)
    scene.add_object(sphere_blanche)
    scene.add_light(lumiere)
    affiche = np.zeros((nx, ny, 3))
    rows = list(range(nx))
    columns = list(range(ny))
    carte = list(itertools.product(rows, columns, [camera], [scene], [nb_reflexion]))
    
    if __name__ == '__main__':
        pool = multiprocessing.Pool(8)
        affiche_map = pool.map(trace_ray_mutliprocess, carte)
        pool.close()
        pool.join()
        affiche = np.array(affiche_map).reshape(nx, ny, 3)
        imsave('test.png', affiche)