Exemple #1
0
def main():
    """ create a window, add scene objects, then run rendering loop """
    viewer = Viewer()
    # place instances of our basic objects
    #

    phi, theta, psi = 30, 20, 40
    #    # construct our robot arm hierarchy for drawing in viewer
    cylinder = Cylinder(40)  # re-use same cylinder instance

    limb_shape = Node(transform=scale(1 / 4, 1 / 4, 5))  # make a thin cylinder
    limb_shape.add(cylinder)  # common shape of arm and forearm

    rotate2 = RotationControlNode(glfw.KEY_E, glfw.KEY_D, (1, 0, 0))
    rotate2.add(limb_shape)

    forearm_node = Node(transform=translate(0, 0, 5 - 1 / 4) @ rotate(
        (1, 0, 0), psi))  # robot arm rotation with phi angle
    forearm_node.add(rotate2)

    arm_node = Node(transform=translate(0, 0, 0.5) @ rotate(
        (1, 0, 0), phi))  # robot arm rotation with phi angle
    arm_node.add(limb_shape, forearm_node)

    rotate1 = RotationControlNode(glfw.KEY_F, glfw.KEY_S, (1, 0, 0))
    rotate1.add(arm_node)

    # make a flat cylinder
    base_shape = Node(transform=identity(), children=[cylinder])
    # viewer.add(base_node)

    viewer.add(TexturedPlane("control/arrows.png"))

    # viewer.add(Cylinder(200))

    translate_keys = {0: vec(0, 0, 0), 2: vec(1, 1, 0), 4: vec(0, 0, 0)}
    rotate_keys = {
        0: quaternion(),
        2: quaternion_from_euler(180, 45, 90),
        3: quaternion_from_euler(180, 0, 180),
        4: quaternion()
    }
    scale_keys = {0: 1, 2: 0.5, 4: 1}
    # keynode = KeyFrameControlNode(translate_keys, rotate_keys, scale_keys)

    base_node = KeyFrameControlNode(translate_keys, rotate_keys, scale_keys)
    base_node.add(base_shape, rotate1)
    viewer.add(base_node)

    #    meshes = load_textured("cube/cube/cube.obj")

    # meshes = load("suzanne.obj")
    # for m in meshes:
    #     keynode.add(m)
    # viewer.add(keynode)

    # start rendering loop
    viewer.run()
def main():
    """ create a window, add scene objects, then run rendering loop """
    viewer = Viewer()
    shader = Shader("color.vert", "color.frag")

    translate_keys = {0: vec(0, 0, 0), 2: vec(1, 1, 0), 4: vec(0, 0, 0)}
    rotate_keys = {0: quaternion(), 2: quaternion_from_euler(180, 45, 90),
                   3: quaternion_from_euler(180, 0, 180), 4: quaternion()}
    scale_keys = {0: 1, 2: 0.5, 4: 1}
    keynode = KeyFrameControlNode(translate_keys, rotate_keys, scale_keys)
    keynode.add(Cylinder(shader))
    viewer.add(keynode)

    # start rendering loop
    viewer.run()
Exemple #3
0
    def __init__(self, sections=11, quarters=20, **params):

        # this "arm" node and its transform serves as control node for bone 0
        # we give it the default identity keyframe transform, doesn't move
        super().__init__({0: (0, 0, 0)}, {0: quaternion()}, {0: 1}, **params)

        # we add a son "forearm" node with animated rotation for the second
        # part of the cylinder
        self.add(SkinningControlNode(
            {0: (0, 0, 0)},
            {0: quaternion(), 2: quaternion_from_euler(90), 4: quaternion()},
            {0: 1}))

        # there are two bones in this animation corresponding to above noes
        bone_nodes = [self, self.children[0]]

        # these bones have no particular offset transform
        bone_offsets = [identity(), identity()]

        # vertices, per vertex bone_ids and weights
        vertices, faces, bone_id, bone_weights = [], [], [], []
        for x_c in range(sections+1):
            for angle in range(quarters):
                # compute vertex coordinates sampled on a cylinder
                z_c, y_c = sincos(360 * angle / quarters)
                vertices.append((x_c - sections/2, y_c, z_c))

                # the index of the 4 prominent bones influencing this vertex.
                # since in this example there are only 2 bones, every vertex
                # is influenced by the two only bones 0 and 1
                bone_id.append((0, 1, 0, 0))

                # per-vertex weights for the 4 most influential bones given in
                # a vec4 vertex attribute. Not using indices 2 & 3 => 0 weight
                # vertex weight is currently a hard transition in the middle
                # of the cylinder
                # TODO: modify weights here for TP7 exercise 2
                weight = 1 if x_c <= sections/2 else 0
                bone_weights.append((weight, 1 - weight, 0, 0))

        # face indices
        faces = []
        for x_c in range(sections):
            for angle in range(quarters):

                # indices of the 4 vertices of the current quad, % helps
                # wrapping to finish the circle sections
                ir0c0 = x_c * quarters + angle
                ir1c0 = (x_c + 1) * quarters + angle
                ir0c1 = x_c * quarters + (angle + 1) % quarters
                ir1c1 = (x_c + 1) * quarters + (angle + 1) % quarters

                # add the 2 corresponding triangles per quad on the cylinder
                faces.extend([(ir0c0, ir0c1, ir1c1), (ir0c0, ir1c1, ir1c0)])

        # the skinned mesh itself. it doesn't matter where in the hierarchy
        # this is added as long as it has the proper bone_node table
        self.add(SkinnedMesh([vertices, bone_weights, bone_id, bone_weights],
                             bone_nodes, bone_offsets, faces))
Exemple #4
0
def main():
    """ main program """
    viewer = Viewer()

    translate_keys = {0: vec(0, 0, 0), 2: vec(1, 1, 0), 4: vec(0, 0, 0)}
    rotate_keys = {
        0: quaternion(),
        2: quaternion_from_euler(180, 45, 90),
        3: quaternion_from_euler(180, 0, 180),
        4: quaternion()
    }
    scale_keys = {0: vec(1, 1, 1), 2: vec(0.5, 0.5, 0.5), 4: vec(1, 1, 1)}
    keynode = KeyFrameControlNode(translate_keys, rotate_keys, scale_keys)
    keynode.add(Cylinder())
    viewer.add(keynode)

    viewer.run()
Exemple #5
0
def add_asteroid():
    a_mesh = PhongMesh('resources/Asteroid/10464_Asteroid_v1_Iterations-2.obj')
    asteroid_base = Node(
        transform=translate(x=2.2, y=4, z=-10) @ scale(x=0.02))
    asteroid_base.add(a_mesh)

    translate_keys = {
        0: vec(2, 5, -11),
        2: vec(1.5, 3.5, -12),
        4: vec(1, 2, -13),
        6: vec(0.5, 0.5, -14),
        8: vec(0, -1, -15),
        10: vec(-0.2, -2.5, -16),
    }

    rotate_keys = {
        0: quaternion_from_euler(30, 0, 150),
        2: quaternion_from_euler(45, 0, 200),
        4: quaternion_from_euler(50, 0, 250),
        6: quaternion_from_euler(55, 0, 300),
        8: quaternion_from_euler(60, 0, 350),
        10: quaternion_from_euler(65, 0, 400)
    }

    scale_keys = {0: 0.1, 2: 0.08, 4: 0.06, 6: 0.04, 8: 0.01, 10: 0.001}

    keynode = KeyFrameControlNode(translate_keys, rotate_keys, scale_keys)
    keynode.add(asteroid_base)
    return keynode
Exemple #6
0
    # viewer.add(TexturedPlane("grass.png"))

    # construct our robot arm hierarchy for drawing in viewer
    # cylinder = Cylinder()             # re-use same cylinder instance
    # limb_shape = Node(transform=identity() @ translate(0, 1, 0) @ scale(0.5, 1, 0.5))  # make a thin cylinder
    # limb_shape.add(cylinder)          # common shape of arm and forearm
    #
    # arm_node = Node(transform=identity() @ translate(0, 2, 0) @ scale(0.7, 0.7, 0.7), children=[cylinder])    # robot arm rotation with phi angle
    # arm_node.add(limb_shape)
    #
    # # make a flat cylinder
    # base_shape = Node(transform=identity(), children=[cylinder])
    # base_node = Node(transform=identity())   # robot base rotation with theta angle
    # base_node.add(base_shape, arm_node)
    # viewer.add(base_node)
    translate_keys = {0: vec(0, 0, 0), 2: vec(1, 1, 0), 4: vec(0, 0, 0)}
    rotate_keys = {0: quaternion(), 2: quaternion_from_euler(180, 45, 90),
                   3: quaternion_from_euler(180, 0, 180), 4: quaternion()}
    scale_keys = {0: vec(1,1,1), 2: vec(0.5,0.5,0.5), 4: vec(1,1,1)}
    keynode = KeyFrameControlNode(translate_keys, rotate_keys, scale_keys)
    keynode.add(Cylinder())
    viewer.add(keynode)
    viewer.run()


if __name__ == '__main__':
    glfw.init()                # initialize window system glfw
    main()                     # main function keeps variables locally scoped
    glfw.terminate()           # destroy all glfw windows and GL contexts
Exemple #7
0
    def get_rotate_keys(self):

        # choose rotation keys based on anti-clockwise/clockwise

        rotate_keys_anticlockwise = {
            0: quaternion(),
            2 * self.timeskip - 0.2: quaternion(),
            2 * self.timeskip: quaternion_from_euler(0, 90, 0),
            3 * self.timeskip - 0.2: quaternion_from_euler(0, 90, 0),
            3 * self.timeskip: quaternion_from_euler(0, 180, 0),
            4 * self.timeskip - 0.2: quaternion_from_euler(0, 180, 0),
            4 * self.timeskip: quaternion_from_euler(0, 270, 0),
            5 * self.timeskip - 0.2: quaternion_from_euler(0, 270, 0),
            5 * self.timeskip: quaternion()
        }

        rotate_keys_clockwise = {
            0: quaternion_from_euler(0, 180, 0),
            2 * self.timeskip - 0.2: quaternion_from_euler(0, 180, 0),
            2 * self.timeskip: quaternion_from_euler(0, 270, 0),
            3 * self.timeskip - 0.2: quaternion_from_euler(0, 270, 0),
            3 * self.timeskip: quaternion(),
            14 * self.timeskip - 0.2: quaternion(),
            4 * self.timeskip: quaternion_from_euler(0, 90, 0),
            5 * self.timeskip - 0.2: quaternion_from_euler(0, 90, 0),
            5 * self.timeskip: quaternion_from_euler(0, 180, 0)
        }

        if (self.direction == 1):
            return rotate_keys_anticlockwise
        else:
            return rotate_keys_clockwise
Exemple #8
0
def add_ufo_ship():
    ufo_mesh = PhongMesh('resources/ufo/ufo.obj')
    ufo_base = Node(transform=translate(x=-0.6, y=0, z=0) @ scale(x=0.04))
    ufo_base.add(ufo_mesh)

    translate_keys = {
        0: vec(-8, 0.8, -10),
        1: vec(-7, 0.7, -9),
        2: vec(-6, 0.6, -8),
        3: vec(-5, 0.5, -7),
        4: vec(-4, 0.45, -6),
        5: vec(-3, 0.38, -5),
        6: vec(-2, 0.35, -4),
        7: vec(-1, 0.25, -3),
        8: vec(-0.3, 0.15, -2.5),
        9: vec(-0.1, -0.1, -1),
        10: vec(0.03, -0.25, -0.5),
        11: vec(0.09, -0.44, 0.1)
    }

    rotate_keys = {
        0: quaternion_from_euler(0, 0, 20),
        1: quaternion_from_euler(0, 0, 20),
        2: quaternion_from_euler(0, 0, 25),
        3: quaternion_from_euler(0, 0, 28),
        4: quaternion_from_euler(0, 0, 33),
        5: quaternion_from_euler(0, 0, 35),
        6: quaternion_from_euler(0, 0, 37),
        7: quaternion_from_euler(0, 0, 30),
        8: quaternion_from_euler(0, 0, 20),
        9: quaternion_from_euler(0, 0, 15),
        10: quaternion_from_euler(0, 0, 25),
        11: quaternion_from_euler(0, 0, 10)
    }

    scale_keys = {
        0: 0.2,
        1: 0.25,
        2: 0.3,
        3: 0.3,
        4: 0.3,
        5: 0.3,
        6: 0.3,
        7: 0.3,
        8: 0.3,
        9: 0.3,
        10: 0.3,
        11: 0.3
    }

    keynode = KeyFrameControlNode(translate_keys, rotate_keys, scale_keys)
    keynode.add(ufo_base)
    return keynode
Exemple #9
0
def main():
    """ create a window, add scene objects, then run rendering loop """
    viewer = Viewer()
    shader = Shader("texture.vert", "texture.frag")
    phong_shader = Shader("phong.vert", "phong.frag")
    skybox_shader = Shader("skybox.vert", "skybox.frag")
    color_shader = Shader("color.vert", "color.frag")
    ground_shader = Shader("ground.vert", "ground.frag")
    tex_phong_shader = Shader("tex_phong.vert", "tex_phong.frag")

    light_dir = (0, -1, 0)

    skybox = Skybox(skybox_shader)
    sky_shape = Node(transform=scale(1000, 1000, 1000))
    sky_shape.add(skybox)
    viewer.add(sky_shape)

    ground = Ground(ground_shader, "./skybox/underwater01_DN.jpg")
    viewer.add(ground)

    cube = Cube(shader, "./cube/cube.png")
    cube_shape = Node(transform=translate(0.3, 0.03, 10) @ scale(1, 1, 1))
    cube_shape.add(cube)
    viewer.add(cube_shape)

    clown_fish = Fish(shader, "./ClownFish/ClownFish2.obj",
                      "./ClownFish/ClownFish2_Base_Color.png")
    clown_fish_shape = Node(transform=translate(3, 1, 1) @ scale(1, 1, 1))
    clown_fish_shape.add(clown_fish)
    viewer.add(clown_fish_shape)

    clown_anim = ProdecuralAnimationNode()
    clown_anim.add(clown_fish_shape)
    viewer.add(clown_anim)

    barracuda_fish = Fish(shader, "./Barracuda/Barracuda2anim.obj",
                          "./Barracuda/Barracuda_Base Color.png")
    barracuda_fish_shape = Node(transform=translate(1, 2, 1) @ scale(1, 1, 1)
                                @ rotate(vec(0, 1, 0), 90))
    barracuda_fish_shape.add(barracuda_fish)

    translate_keys = {
        0: vec(1, 1, 1),
        2: vec(25, 1, 0),
        3: vec(50, 0, 0),
        5: vec(25, 0, 0),
        7: vec(0, 0, 0)
    }

    rotate_keys = {
        1: quaternion(),
        4: quaternion_from_euler(0, 180, 0),
        6: quaternion(0)
    }

    scale_keys = {0: 1, 2: 1, 4: 0.5}

    keynode = KeyFrameControlNode(translate_keys, rotate_keys, scale_keys)
    keynode.add(barracuda_fish_shape)
    viewer.add(keynode)

    submarine = Submarine(shader)
    submarine_shape = Node(transform=translate(-4, 1, 1) @ scale(
        0.1, 0.1, 0.1))  # make a thin cylinder
    submarine_shape.add(submarine)  # scaled cylinder shape
    submarine_rot = RotationControlNode(glfw.KEY_LEFT, glfw.KEY_RIGHT,
                                        glfw.KEY_UP, glfw.KEY_DOWN,
                                        glfw.KEY_SPACE, glfw.KEY_LEFT_SHIFT,
                                        glfw.KEY_F, vec(0, 1, 0))
    submarine_rot.add(submarine_shape)
    viewer.add(submarine_rot)

    phong_fish = PhongFish(tex_phong_shader, "./Barracuda/Barracuda2anim.obj",
                           "./Barracuda/Barracuda_Base Color.png", light_dir)
    phong_fish_shape = Node(
        transform=translate(-1, -1, -1) @ scale(0.1, 0.1, 0.1) @ rotate(
            (0, 1, 0), 90))
    phong_fish_shape.add(phong_fish)
    viewer.add(phong_fish_shape)

    phong_fish_2 = PhongFish(tex_phong_shader, "./fish-new/fish.obj",
                             "./fish-new/fish.jpg", light_dir)
    phong_fish_2_shape = Node(
        transform=translate(4, 1, -5) @ scale(0.05, 0.05, 0.05))
    phong_fish_2_shape.add(phong_fish_2)
    viewer.add(phong_fish_2_shape)

    # diver = Diver(phong_shader, light_dir)
    # viewer.add(diver)

    # Hierarchical fishes
    b1 = Node(transform=translate(1, 2, 20))
    b1.add(barracuda_fish)

    b2 = Node(transform=translate(4, 4, 23))
    b2.add(barracuda_fish)

    b3 = Node(transform=translate(3, 3, 25))
    b3.add(barracuda_fish)

    b_group = Node()
    b_group.add(b1, b2, b3)

    b_anim = ProdecuralAnimationNode2()
    b_anim.add(b_group)

    viewer.add(b_anim)

    # start rendering loop
    viewer.run()