def render(camera, world): image = canvas(camera.hsize, camera.vsize) start = time.time() for y in range(camera.vsize): current = time.time() elapsed = round(current - start, 2) percent = round(y / camera.vsize * 100, 2) if y != 0: t = round((1 / (y / camera.vsize)) * elapsed - elapsed, 2) print( "\r" + str(percent).rjust(5) + "% : " + str(t) + "s left : " + str(elapsed) + "s elapsed", end=" ", flush=True, ) for x in range(camera.hsize): ray = ray_for_pixel(camera, x, y) color = color_at(world, ray) write_pixel(image, x, y, color) print() return image
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.") print(str(round(end - start, 2)) + "s")
def step_impl(context): write_pixel(context.c, 4, 2, context.c3)
def step_impl(context): write_pixel(context.c, 2, 1, context.c2)
def step_impl(context): write_pixel(context.c, 0, 0, context.c1)
def step_impl(context): write_pixel(context.c, 2, 3, context.red)
def step_impl(context, x, y): canvas.write_pixel(getattr(context, can), w, h, getattr(context, color))