diff options
Diffstat (limited to 'scenes')
-rw-r--r-- | scenes/__init__.py | 1 | ||||
-rw-r--r-- | scenes/checkerboard.py | 71 |
2 files changed, 32 insertions, 40 deletions
diff --git a/scenes/__init__.py b/scenes/__init__.py new file mode 100644 index 0000000..1d57220 --- /dev/null +++ b/scenes/__init__.py @@ -0,0 +1 @@ +from checkerboard import build_checkerboard_scene diff --git a/scenes/checkerboard.py b/scenes/checkerboard.py index 2852348..1475a30 100644 --- a/scenes/checkerboard.py +++ b/scenes/checkerboard.py @@ -5,54 +5,45 @@ dir = os.path.split(os.path.realpath(__file__))[0] sys.path.append(dir + '/..') import numpy as np -from itertools import product -from itertoolset import ncycles -from geometry import * +from itertoolset import * +from geometry import Mesh, Solid, Geometry from optics import * -from make import * +from make import sphere +from view import buildable -checkers_per_side = 10 -squares_per_checker = 10 +@buildable('checkerboard_scene') +def build_checkerboard_scene(checkers_per_side=10, squares_per_checker=50): + x = np.linspace(-5.0, 5.0, checkers_per_side*squares_per_checker+1) + y = np.linspace(-5.0, 5.0, checkers_per_side*squares_per_checker+1) + vertices = np.array(tuple(product(x,y,[0]))) -x = np.linspace(-5.0, 5.0, checkers_per_side*squares_per_checker+1) -y = np.linspace(-5.0, 5.0, checkers_per_side*squares_per_checker+1) + triangles = [] + for j in range(y.size-1): + for i in range(x.size-1): + triangles.append([j*len(x)+i, (j+1)*len(x)+i,(j+1)*len(x)+i+1]) + triangles.append([j*len(x)+i, j*len(x)+i+1,(j+1)*len(x)+i+1]) -vertices = np.array(tuple(product(x,y,[0]))) + checkerboard_mesh = Mesh(vertices, triangles, remove_duplicate_vertices=True) -triangles = [] -for j in range(y.size-1): - for i in range(x.size-1): - triangles.append([j*len(x)+i, (j+1)*len(x)+i,(j+1)*len(x)+i+1]) - triangles.append([j*len(x)+i, j*len(x)+i+1,(j+1)*len(x)+i+1]) + checkerboard_color_line1 = take(checkers_per_side*squares_per_checker*2, cycle([0]*2*squares_per_checker + [0xffffff]*2*squares_per_checker))*squares_per_checker + checkerboard_color_line2 = take(checkers_per_side*squares_per_checker*2, cycle([0xffffff]*2*squares_per_checker + [0]*2*squares_per_checker))*squares_per_checker + checkerboard_color = take(len(checkerboard_mesh.triangles), cycle(checkerboard_color_line1 + checkerboard_color_line2)) -checkerboard = Mesh(vertices, triangles, remove_duplicate_vertices=True) -checker_color_line1 = take(checkers_per_side*squares_per_checker*2, cycle([0]*2*squares_per_checker + [0xffffff]*2*squares_per_checker))*squares_per_checker -checker_color_line2 = take(checkers_per_side*squares_per_checker*2, cycle([0xffffff]*2*squares_per_checker + [0]*2*squares_per_checker))*squares_per_checker -checker_color = take(len(checkerboard.triangles), cycle(checker_color_line1 + checker_color_line2)) + checkerboard_surface_line1 = take(checkers_per_side*squares_per_checker*2, cycle([black_surface]*2*squares_per_checker + [lambertian_surface]*2*squares_per_checker))*squares_per_checker + checkerboard_surface_line2 = take(checkers_per_side*squares_per_checker*2, cycle([lambertian_surface]*2*squares_per_checker + [black_surface]*2*squares_per_checker))*squares_per_checker + checkerboard_surface = take(len(checkerboard_mesh.triangles), cycle(checkerboard_surface_line1 + checkerboard_surface_line2)) -print len(checkerboard.triangles) -print len(checker_color) + checkerboard = Solid(checkerboard_mesh, vacuum, vacuum, surface=checkerboard_surface, color=checkerboard_color) -checker_surface_line1 = take(checkers_per_side*squares_per_checker*2, cycle([black_surface]*2*squares_per_checker + [lambertian_surface]*2*squares_per_checker))*squares_per_checker -checker_surface_line2 = take(checkers_per_side*squares_per_checker*2, cycle([lambertian_surface]*2*squares_per_checker + [black_surface]*2*squares_per_checker))*squares_per_checker -checker_surface = take(len(checkerboard.triangles), cycle(checker_surface_line1 + checker_surface_line2)) + sphere1 = Solid(sphere(theta=np.pi/128), water, vacuum) + sphere2 = Solid(sphere(theta=np.pi/128), vacuum, vacuum, surface=shiny_surface) + sphere3 = Solid(sphere(theta=np.pi/128), vacuum, vacuum, surface=lambertian_surface) -checkerboard_solid = Solid(checkerboard, vacuum, vacuum, surface=checker_surface, color=checker_color) + checkerboard_scene = Geometry() + checkerboard_scene.add_solid(checkerboard, displacement=(0,0,-1.5)) + checkerboard_scene.add_solid(sphere1, displacement=(2.0,-2.0,0)) + checkerboard_scene.add_solid(sphere2, displacement=(-2.0,-2.0,0)) + checkerboard_scene.add_solid(sphere3, displacement=(0.0,2.0,0)) -print len(checker_surface) - -water_sphere_solid = Solid(sphere(theta=np.pi/64), water, vacuum) -mirror_sphere_solid = Solid(sphere(theta=np.pi/64), vacuum, vacuum, surface=shiny_surface) -diffuse_sphere_solid = Solid(sphere(theta=np.pi/64), vacuum, vacuum, surface=lambertian_surface) - -checkerboard_scene = Geometry() -checkerboard_scene.add_solid(checkerboard_solid, displacement=(0,0,-1.5)) -checkerboard_scene.add_solid(water_sphere_solid, displacement=(2.0,-2.0,0)) -checkerboard_scene.add_solid(mirror_sphere_solid, displacement=(-2.0,-2.0,0)) -checkerboard_scene.add_solid(diffuse_sphere_solid, displacement=(0.0,2.0,0)) - -#from view import * -from render import * - -view(checkerboard_scene) + return checkerboard_scene |