Пример #1
0
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")