parent
d7c2912645
commit
02ddb6af07
@ -0,0 +1,89 @@
|
||||
from math import pi
|
||||
from raytracer.shapes import sphere
|
||||
from raytracer.matrix import identity_matrix, view_transform
|
||||
from raytracer.vector import color, point, vector
|
||||
from raytracer.materials import material
|
||||
from raytracer.patterns import stripe_pattern, gradient, ring, checkerboard
|
||||
from raytracer.world import world
|
||||
from raytracer.camera import camera
|
||||
from raytracer.lights import point_light
|
||||
|
||||
from raytracer.colors import rainbow
|
||||
|
||||
|
||||
pattern = stripe_pattern(rainbow.blue, rainbow.green)
|
||||
pattern.transform = identity_matrix.scaling(0.1, 0.1, 0.1)
|
||||
|
||||
floor = sphere()
|
||||
floor.transform = identity_matrix.scaling(10, 0.01, 10)
|
||||
floor.material = material()
|
||||
floor.material.specular = 0
|
||||
floor.material.pattern = pattern
|
||||
floor.material.reflective = 0.3
|
||||
|
||||
left_wall = sphere()
|
||||
left_wall.transform = (
|
||||
identity_matrix.translation(0, 0, 5)
|
||||
.rotation_y(-pi / 4)
|
||||
.rotation_x(pi / 2)
|
||||
.scaling(10, 0.01, 10)
|
||||
)
|
||||
left_wall.material = floor.material
|
||||
|
||||
right_wall = sphere()
|
||||
right_wall.transform = (
|
||||
identity_matrix.translation(0, 0, 5)
|
||||
.rotation_y(pi / 4)
|
||||
.rotation_x(pi / 2)
|
||||
.scaling(10, 0.01, 10)
|
||||
)
|
||||
right_wall.material = material()
|
||||
right_wall.material.specular = 0
|
||||
right_wall.material.pattern = checkerboard(rainbow.blue, rainbow.green)
|
||||
right_wall.material.pattern.transform = (
|
||||
identity_matrix.translation(0, 0, 5)
|
||||
.rotation_y(pi / 4)
|
||||
.rotation_x(pi / 2)
|
||||
.scaling(0.05, 0.05, 0.05)
|
||||
)
|
||||
|
||||
|
||||
middle = sphere()
|
||||
middle.transform = identity_matrix.translation(-0.5, 1, 0.5)
|
||||
middle.material = material()
|
||||
middle.material.pattern = pattern
|
||||
middle.material.diffuse = 0.7
|
||||
middle.material.specular = 0.3
|
||||
|
||||
right = sphere()
|
||||
right.transform = identity_matrix.translation(1.5, 0.5, -0.5).scaling(0.5, 0.5, 0.5)
|
||||
right.material = material()
|
||||
right.material.reflective = 0.5
|
||||
right.material.pattern = gradient(rainbow.orange, rainbow.yellow)
|
||||
right.material.pattern.transform = identity_matrix.translation(-1, 0, 0).scaling(
|
||||
2, 1, 1
|
||||
)
|
||||
right.material.diffuse = 0.7
|
||||
right.material.specular = 0.3
|
||||
|
||||
left = sphere()
|
||||
left.transform = identity_matrix.translation(-1.5, 0.33, -0.75).scaling(
|
||||
0.33, 0.33, 0.33
|
||||
)
|
||||
left.material = material()
|
||||
left.material.pattern = ring(rainbow.grass, rainbow.red)
|
||||
left.material.pattern.transform = identity_matrix.translation(0.5, 0, 0).scaling(
|
||||
0.2, 0.2, 0.2
|
||||
)
|
||||
left.material.diffuse = 0.7
|
||||
left.material.specular = 0.3
|
||||
|
||||
w = world()
|
||||
w.objects = [floor, left_wall, right_wall, middle, right, left]
|
||||
w.lights = [point_light(point(-10, 10, -15), color(1, 1, 1))]
|
||||
|
||||
c = camera(800, 400, pi / 3)
|
||||
c.transform = view_transform(point(0.33, 1.5, -5), point(0, 1, 0), vector(0, 1, 0))
|
||||
|
||||
image = c.render(w)
|
||||
image.ppm("pictures/reflections")
|
Loading…
Reference in new issue