Beispiel #1
0
def prepare_computations(intersection, ray, xs=None):
    c = comps()
    c.t = intersection.t
    c.object = intersection.object
    c.point = position(ray, c.t)
    c.eyev = -ray.direction
    c.normalv = normal_at(c.object, c.point)
    if dot(c.normalv, c.eyev) < 0:
        c.inside = True
        c.normalv = -c.normalv
    else:
        c.inside = False
    c.over_point = c.point + c.normalv * EPSILON
    c.under_point = c.point - c.normalv * EPSILON
    c.reflectv = reflect(ray.direction, c.normalv)
    containers = []
    if xs:
        for i in xs:
            if i == intersection:
                if len(containers) == 0:
                    c.n1 = 1.0
                else:
                    c.n1 = containers[-1].material.refractive_index
            if i.object in containers:
                containers.remove(i.object)
            else:
                containers.append(i.object)
            if i == intersection:
                if len(containers) == 0:
                    c.n2 = 1.0
                else:
                    c.n2 = containers[-1].material.refractive_index
                break
    return c
Beispiel #2
0
    print("Starting render...")

    for y in range(canvas_pixels):

        world_y = half - pixel_size * y

        for x in range(canvas_pixels):

            world_x = -half + pixel_size * x
            pos = point(world_x, world_y, wall_z)

            r = ray(ray_origin, normalize(pos - ray_origin))
            xs = intersect(shape, r)

            if hit(xs) is not None:
                pnt = position(r, xs[0].t)
                normal = normal_at(xs[0].object, pnt)
                eye = -r.direction
                color = lighting(xs[0].object.material, xs[0].object, light,
                                 pnt, eye, normal)
                write_pixel(canvas, x, y, color)

    end = time.time()
    print("Finished render.")
    print(str(round(end - start, 2)) + "s")

    start = time.time()
    print("Start writing file...")
    canvas_to_ppm(canvas).write_file("images/sphere.ppm")
    end = time.time()
    print("Finished writing file.")
Beispiel #3
0
def step_impl(context):
    assert position(context.r, -1) == point(1, 3, 4)
Beispiel #4
0
def step_impl(context):
    assert position(context.r, 2.5) == point(4.5, 3, 4)
Beispiel #5
0
def step_impl(context):
    assert position(context.r, 0) == point(2, 3, 4)