Esempio n. 1
0
def main():
    scanner = SimpleScanner()

    gl.glClearColor(0.1, 0.1, 0.2, 1.0)
    timer_msec = int(1000 / 60)  # 60 times per second
    renderer = Renderer()
    drawings_list = []
    fish_queue = Queue(
    )  # Queue to maintain order of the fish and kill the oldest ones
    fish_limit = 10  # Maximum amount of fish to draw
    scanned_fish_queue = Queue()
    draw_ocean(drawings_list)

    fish_shader_program = Renderer.create_shader(gl.GL_VERTEX_SHADER,
                                                 FISH_SHADER_CODE)
    bubble_texture = Renderer.create_texture_from_file(
        'ocean/images/bubble.png')
    load_fish_from_files(scanner, drawings_list, fish_queue,
                         fish_shader_program, bubble_texture)

    glut.glutDisplayFunc(partial(renderer.render, drawings_list))
    glut.glutIgnoreKeyRepeat(True)
    glut.glutKeyboardFunc(create_key_processor(scanner, scanned_fish_queue))
    glut.glutTimerFunc(
        timer_msec,
        create_animation_function(renderer, drawings_list, scanned_fish_queue,
                                  fish_queue, fish_limit, timer_msec,
                                  fish_shader_program, bubble_texture), 0)

    glut.glutMainLoop()
Esempio n. 2
0
def draw_ocean(drawings_list: List[Drawing]) -> None:
    """
    Draw all the sprites in the ocean scene
    :param drawings_list: Lists of sprites to draw
    :return:
    """
    seaweed_shader_program = Renderer.create_shader(gl.GL_VERTEX_SHADER,
                                                    SEAWEED_SHADER_CODE)

    drawings_list.append(create_back_layer('ocean/images/back_down.png', -0.8))
    drawings_list.append(
        create_back_layer('ocean/images/back_middle.png', -0.78))
    drawings_list.append(create_back_layer('ocean/images/back_reef.png', 0.8))

    draw_sails(drawings_list, seaweed_shader_program)

    seaweed_texture = Renderer.create_texture_from_file(
        'ocean/images/seaweed_2.png')
    # Draw seaweed under the ship
    drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program)
    drawing.position = np.array([1.2, 0.4, -0.75])
    drawing.scale = np.array([0.8, 0.4, 1.0])
    drawings_list.append(drawing)

    seaweed_texture = Renderer.create_texture_from_file(
        'ocean/images/seaweed_1.png')
    # Draw seaweed in the right corner
    drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program)
    drawing.position = np.array([1.2, 1.0, 0.9])
    drawing.scale = np.array([0.8, 1.4, 1.0])
    # drawing.color = np.array([0.5, 0.5, 1.0])
    drawings_list.append(drawing)

    # Draw seaweed in the front of the rock
    drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program)
    drawing.position = np.array([0.2, 0.15, -0.7])
    drawing.scale = np.array([0.4, 0.4, 1.0])
    # drawing.color = np.array([0.6, 0.6, 1.0])
    drawings_list.append(drawing)

    seaweed_texture = Renderer.create_texture_from_file(
        'ocean/images/seaweed_3.png')
    # Draw seaweed in the left corner
    drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program)
    drawing.position = np.array([-1.2, 0.6, 0.9])
    drawing.scale = np.array([0.3, 1.0, 1.0])
    # drawing.color = np.array([0.5, 0.5, 1.0])
    drawings_list.append(drawing)

    # Draw seaweed on the background
    drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program)
    drawing.position = np.array([-0.8, -0.5, -0.795])
    drawing.scale = np.array([0.3, 1.0, 1.0])
    drawing.color = np.array([0.3, 0.3, 0.8])
    drawings_list.append(drawing)

    drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program)
    drawing.position = np.array([0.0, -0.2, -0.795])
    drawing.scale = np.array([-0.3, 1.0, 1.0])
    drawing.color = np.array([0.3, 0.3, 0.8])
    drawings_list.append(drawing)

    drawing = DrawingSeaweed(seaweed_texture, shader=seaweed_shader_program)
    drawing.position = np.array([-0.4, -0.2, -0.795])
    drawing.scale = np.array([0.1, 0.3, 1.0])
    drawing.color = np.array([0.1, 0.1, 0.4])
    drawings_list.append(drawing)