def main(): model = Model("obj/african_head.obj") image = TGAImage(width, height, Format.RGB) # model.write("info.txt") zbuffer = [] for i in range(0, image.width * image.height): zbuffer.append(-sys.maxint - 1) for i in range(0, len(model.faces)): screen_coord = [Vector(), Vector(), Vector()] world_coords = [Vector(), Vector(), Vector()] for j in range(0, 3): world_coord_vector = model.get_vert(i, j) screen_coord[j].x = int((world_coord_vector.x + 1.) * width / 2) screen_coord[j].y = int((world_coord_vector.y + 1.) * height / 2) screen_coord[j].z = int((world_coord_vector.z + 1.) * depth / 2) world_coords[j] = world_coord_vector # n = (world_coords[2] - world_coords[0]) ^ (world_coords[1] - world_coords[0]) # norm = n.normalize() # intensity = norm.mul(light_intensity_vector) # if intensity < 0: # skip invisible triangle # continue uv = [Vector(), Vector(), Vector()] for k in range(0, 3): uv[k] = model.get_uv(i, k) norms = [Vector(), Vector(), Vector()] for k in range(0, 3): norms[k] = model.get_norm(i, k) # random_color = Color(randint(0, 255), randint(0, 255), randint(0, 255), 255) # color = Color(int(intensity * 255), int(intensity * 255), int(intensity * 255), 255) triangle(screen_coord[0], screen_coord[1], screen_coord[2], uv[0], uv[1], uv[2], norms[0], norms[1], norms[2], image, zbuffer, model) image.write("output.tga")