Beispiel #1
0
def floor_material():
    material = Material()
    material.color = Color(1, .9, .9)
    material.specular = 0
    material.pattern = stripe_pattern(RED, BLUE)
    material.pattern.transform = Scaling(.2, .2, .2) * rotation_z(math.pi / 4)
    return material
Beispiel #2
0
def main():
    shape = ClippedShape(crooked_plane())
    #shape.transform = ReflectionXZ()
    shape.material = Material()
    shape.material.color = Color(1, .2, 1)
    objects = (shape, )
    draw_objects(objects)
Beispiel #3
0
def main(resolution):
    logging.basicConfig(
        level=logging.INFO,
        format=
        '%(asctime)s %(levelname)s %(filename)s:%(lineno)s %(name)s %(message)s'
    )

    shape = ClippedShape(CrookedPlane())
    shape.material = Material()
    shape.material.color = Color(1, .2, 1)
    shape.material.transparency = 1.0
    shape.material.refractive_index = 1.5
    objects = (shape, )

    rad = 6
    camera_height = .8 * rad
    frames = []
    for t in np.arange(0, math.pi, .1 * math.pi):
        logging.info("New Frame %s", t)
        camera_position = Point(rad * math.cos(t), rad * math.sin(t),
                                camera_height)
        vt = view_transform(camera_position, Point(0, 0, 0), Vector(0, 0, 1))
        canvas = make_single_frame(objects, vt, resolution)
        frames.append(canvas._image)

    path = Path(__file__).parent / "chap11.gif"
    imageio.mimsave(str(path), frames, duration=0.25)
Beispiel #4
0
def make_middle():
    middle = set_transform(Sphere(), Translation(-0.5, 1, 0.5))
    middle.material = Material()
    middle.material.color = Color(0.1, 1, 0.5)
    middle.material.diffuse = 0.7
    middle.material.specular = 0.3
    return middle
Beispiel #5
0
def main():
    logging.basicConfig(
        level=logging.INFO,
        format=
        '%(asctime)s %(levelname)s %(filename)s:%(lineno)s %(name)s %(message)s'
    )

    shape = ClippedShape(CrookedPlane())
    shape.material = Material()
    shape.material.color = Color(1, .2, 1)
    #shape.material.pattern = gradient_pattern(BLUE, GREEN)
    #shape.material.pattern.transform = Scaling(4, 2, 2)
    objects = (shape, )

    rad = 6
    camera_height = .8 * rad
    frames = []
    for t in np.arange(0, math.pi, .1 * math.pi):
        logging.info("New Frame %s", t)
        camera_position = Point(rad * math.cos(t), rad * math.sin(t),
                                camera_height)
        vt = view_transform(camera_position, Point(0, 0, 0), Vector(0, 0, 1))
        canvas = make_single_frame(objects, vt)
        frames.append(canvas._image)

    imageio.mimsave("examples/crooked_plane.gif", frames, duration=0.25)
Beispiel #6
0
def make_right():
    right = set_transform(Sphere(),
                          Translation(1.5, 0.5, -0.5) * Scaling(0.5, 0.5, 0.5))
    right.material = Material()
    right.material.color = Color(0.5, 1, 0.1)
    right.material.diffuse = 0.7
    right.material.specular = 0.3
    return right
Beispiel #7
0
def make_left():
    left = set_transform(
        Sphere(),
        Translation(-1.5, 0.33, -0.75) * Scaling(0.33, 0.33, 0.33))
    left.material = Material()
    left.material.color = Color(1, 0.8, 0.1)
    left.material.diffuse = 0.7
    left.material.specular = 0.3
    return left
Beispiel #8
0
def make_middle():
    middle = set_transform(Sphere(), Translation(-0.5, 1, 0.5))
    middle.material = Material()
    middle.material.color = Color(0.1, 1, 0.5)
    middle.material.diffuse = 0.7
    middle.material.specular = 0.3
    middle.material.pattern = gradient_pattern(BLUE, GREEN)
    middle.material.pattern.transform = Scaling(.2, .2, .2)
    return middle
Beispiel #9
0
def make_left():
    left = set_transform(
        Sphere(),
        Translation(-1.5, 0.33, -0.75) * Scaling(0.33, 0.33, 0.33))
    left.material = Material()
    left.material.color = Color(1, 0.8, 0.1)
    left.material.diffuse = 0.7
    left.material.specular = 0.3
    left.material.pattern = checkers_pattern(WHITE, BLACK)
    return left
Beispiel #10
0
def make_right():
    right = set_transform(Sphere(),
                          Translation(1.5, 0.5, -0.5) * Scaling(0.5, 0.5, 0.5))
    right.material = Material()
    #right.material.color = Color(0.5, 1, 0.1)
    #right.material.diffuse = 0.7
    #right.material.specular = 0.3
    right.material.pattern = ring_pattern(GREEN, BLACK)
    right.material.pattern.transform = Scaling(.2, .2, .2) * rotation_x(
        math.pi / 2)
    return right
Beispiel #11
0
def step_impl(context, m):
    _m = Material()
    setattr(context, m, _m)
Beispiel #12
0
def floor_material():
    material = Material()
    material.color = Color(1, .9, .9)
    material.specular = 0
    return material
Beispiel #13
0
 def __init__(self, material=None):
     self.material = Material()
Beispiel #14
0
from ray_tracer.canvas import Canvas, write_pixel, canvas_to_png
from ray_tracer.colors import Color, WHITE
from ray_tracer.intersections import intersect, hit
from ray_tracer.lights import point_light
from ray_tracer.material import Material, lighting
from ray_tracer.rays import Ray, position
from ray_tracer.shapes import Sphere
from ray_tracer.tuples import Point, normalize

ray_origin = Point(0, 0, -5)
wall_z = 10
wall_size = 7
light = point_light(Point(-10, 10, -10), WHITE)
shape = Sphere()
shape.material = Material()
shape.material.color = Color(1, .2, 1)


def get_color(a_hit, ray):
    point = position(ray, a_hit.t)
    normal = a_hit.object.normal_at(point)
    eye = -ray.direction
    color = lighting(a_hit.object.material, a_hit.object, light, point, eye,
                     normal)
    return color


def cast_this_point(canvas, canvas_x, canvas_y, world_x, world_y):
    spot_on_wall = Point(world_x, world_y, wall_z)
    ray = Ray(ray_origin, normalize(spot_on_wall - ray_origin))