예제 #1
0
class Mover(avango.script.Script):

    ## output field
    sf_mat = avango.gua.SFMatrix4()

    ## constructor
    def __init__(self):
        self.super(Mover).__init__()

    def my_constructor(self,
                       SCENEGRAPH=None,
                       START_MATRIX=avango.gua.make_identity_mat(),
                       VIEWER=None):

        ## init internal classes
        self.input = KeyboardInput()
        self.input.my_constructor(VIEWER=VIEWER)

        self.accumulator = Accumulator()
        self.accumulator.my_constructor(START_MATRIX=START_MATRIX)

        self.groundFollowing = GroundFollowing()
        self.groundFollowing.my_constructor(SCENEGRAPH=SCENEGRAPH,
                                            START_MATRIX=START_MATRIX)

        ## init field connections
        self.accumulator.sf_move_vec.connect_from(
            self.input.sf_move_vec)  # connect input into accumulator

        self.sf_mat.connect_from(
            self.accumulator.sf_mat
        )  # connect output of accumulator to mover output matrix
예제 #2
0
파일: main.py 프로젝트: NaNaDi/VR_Exercises
def start():

    ## create scenegraph
    scenegraph = avango.gua.nodes.SceneGraph(Name="scenegraph")

    ## init viewing setup
    viewingSetup = SimpleViewingSetup(SCENEGRAPH=scenegraph,
                                      STEREO_MODE="mono")
    #viewingSetup = SimpleViewingSetup(SCENEGRAPH = scenegraph, STEREO_MODE = "anaglyph")

    ## init game avatar
    avatar = Avatar(SCENEGRAPH=scenegraph,
                    START_MATRIX=avango.gua.make_trans_mat(0.1, 0.14, 0.0))

    ## init scene
    scene = Scene(PARENT_NODE=scenegraph.Root.value)

    print_graph(scenegraph.Root.value)

    keyboardInput = KeyboardInput()

    accumulator = Accumulator()
    viewingSetup.navigation_node.Transform.connect_from(accumulator.sf_mat)

    ## init field connections (dependency graph)
    viewingSetup.connect_navigation_matrix(
        avatar.avatar_transform.Transform
    )  # connect avatar matrix to camera matrix
    viewingSetup.viewer.DesiredFPS.connect_from(
        avatar.input.sf_max_fps
    )  # change viewer FPS during runtime (enforce slow/fast frame-rate rendering)

    ## start application/render loop
    viewingSetup.run(locals(), globals())
예제 #3
0
파일: Arm.py 프로젝트: NaNaDi/VR_Exercises
    def __init__(
            self,
            PARENT_NODE,
            DIAMETER=0.1,  # in meter
            LENGTH=0.1,  # in meter
            ROT_OFFSET_MAT=avango.gua.make_identity_mat(
            ),  # the rotation offset relative to the parent coordinate system
    ):

        ## get unique id for this instance
        self.id = Arm.number_of_instances
        Arm.number_of_instances += 1

        self.parent = PARENT_NODE

        ### resources ###

        _loader = avango.gua.nodes.TriMeshLoader(
        )  # get trimesh loader to load external tri-meshes

        self.input = KeyboardInput()

        self.arm_geometry = _loader.create_geometry_from_file(
            "arm_geometry", "data/objects/cylinder.obj",
            avango.gua.LoaderFlags.DEFAULTS)
        self.arm_geometry.Transform.value = avango.gua.make_trans_mat(
            0.0, 0.0, 0.0) * avango.gua.make_scale_mat(DIAMETER, LENGTH,
                                                       DIAMETER)
        self.arm_geometry.Material.value.set_uniform(
            "Color", avango.gua.Vec4(1.0, 1.0, 0.0, 1.0))

        self.arm_node = avango.gua.nodes.TransformNode(Name="ArmNode")
        self.arm_node.Children.value.append(self.arm_geometry)

        PARENT_NODE.Children.value.append(self.arm_node)
예제 #4
0
    def __init__(self):
        self.super(Hinge).__init__()

        ## get unique id for this instance
        self.id = Hinge.number_of_instances
        Hinge.number_of_instances += 1

        self.input = KeyboardInput()

        self.degree = 0.0
예제 #5
0
    def my_constructor(
            self,
            START_MATRIX=avango.gua.make_identity_mat(),
    ):

        ## set initial state
        self.sf_mat.value = START_MATRIX

        ## init internal sub-classes
        input = KeyboardInput()
예제 #6
0
    def __init__(
        self,
        PARENT_NODE=None,
        TARGET_LIST=[],
    ):
        ## init internal sub-classes
        self.input = KeyboardInput()
        # b.Input.connect_from(a.Output)
        ## init base node for whole crane
        self.base_node = avango.gua.nodes.TransformNode(Name="base_node")
        self.base_node.Transform.value = \
         avango.gua.make_trans_mat(.0, -.1,.0)
        PARENT_NODE.Children.value.append(self.base_node)

        # rotational axises
        rotAxi0 = avango.gua.Vec3(0, 1, 0)
        rotAxi1 = avango.gua.Vec3(0, 0, 1)
        # FIRST
        hinge0 = Hinge()
        hinge0.my_constructor(PARENT_NODE=self.base_node,
                              DIAMETER=.1,
                              HEIGHT=.01,
                              ROT_AXIS=rotAxi0,
                              SF_ROT_INPUT_MAT=[-180, 180])
        hinge0.sf_rot_value.connect_from(self.input.sf_rot_input0)
        arm0 = Arm(hinge0.matrix, .01, .1)
        # SECOND
        hinge1 = Hinge()
        hinge1.my_constructor(PARENT_NODE=hinge0.matrix,
                              DIAMETER=.02,
                              HEIGHT=.01,
                              ROT_OFFSET_MAT=avango.gua.make_trans_mat(
                                  .0, arm0.length, .0),
                              ROT_AXIS=rotAxi1,
                              SF_ROT_INPUT_MAT=[0, 90])
        hinge1.sf_rot_value.connect_from(self.input.sf_rot_input1)
        arm1 = Arm(hinge1.matrix, .005, .08)
        # THIRD
        hinge2 = Hinge()
        hinge2.my_constructor(PARENT_NODE=hinge1.matrix,
                              DIAMETER=.02,
                              HEIGHT=.01,
                              ROT_OFFSET_MAT=avango.gua.make_trans_mat(
                                  .0, arm1.length, .0),
                              ROT_AXIS=rotAxi1,
                              SF_ROT_INPUT_MAT=[-90, 90])
        hinge2.sf_rot_value.connect_from(self.input.sf_rot_input2)
        arm2 = Arm(hinge2.matrix, .005, .08)
        # FOURTH
        hook = Hook()
        hook.rot_mat = avango.gua.make_trans_mat(.0, arm2.length, .0)
        hook.my_constructor(hinge2.matrix, .02, TARGET_LIST)
        hinge0.hook = hook
        hinge1.hook = hook
        hinge2.hook = hook
예제 #7
0
    def __init__(
            self,
            SCENEGRAPH=None,
            START_MATRIX=avango.gua.make_identity_mat(),
    ):

        self.translation_factor = 0.01

        ### resources ###
        _loader = avango.gua.nodes.TriMeshLoader(
        )  # init trimesh loader to load external meshes

        ## init avatar nodes
        self.avatar_geometry = _loader.create_geometry_from_file(
            "avatar_geometry", "data/objects/monkey.obj",
            avango.gua.LoaderFlags.DEFAULTS)
        self.avatar_geometry.Transform.value = avango.gua.make_scale_mat(0.03)
        self.avatar_geometry.Material.value.set_uniform(
            "Color", avango.gua.Vec4(1.0, 0.2, 0.2, 1.0))

        self.avatar_transform = avango.gua.nodes.TransformNode(
            Name="avatar_node")
        self.avatar_transform.Children.value = [self.avatar_geometry]
        SCENEGRAPH.Root.value.Children.value.append(self.avatar_transform)

        ## init internal sub-classes
        self.input = KeyboardInput()

        self.accumulator = Accumulator()
        self.accumulator.my_constructor(START_MATRIX=START_MATRIX)

        self.groundFollowing = GroundFollowing()
        self.groundFollowing.my_constructor(SCENEGRAPH=SCENEGRAPH,
                                            START_MATRIX=START_MATRIX)

        ## init field connections (dependency graph)
        self.accumulator.sf_move_vec.connect_from(
            self.input.sf_move_vec
        )  # propagate movement vector into movement accumulator
        self.avatar_transform.Transform.connect_from(
            self.accumulator.sf_mat
        )  # connect final movement matrix to avatar node matrix
예제 #8
0
    def __init__(self,
        PARENT_NODE = None,
        TARGET_LIST = [],
        ):

        self.rotation = 0.0
        self.world_pos = (0,0,0)
        ### resources ###

        ## init base node for whole crane
        self.base_node = avango.gua.nodes.TransformNode(Name = "base_node")
        self.base_node.Transform.value = avango.gua.make_trans_mat(0.0,-0.1,0.0)
        PARENT_NODE.Children.value.append(self.base_node)

        self.targets = TARGET_LIST
        ## init internal sub-classes
        self.input = KeyboardInput()


        ## ToDo: init first hinge && connect rotation input 
        # ...
        #self.sf_rotation.connect_from(self.input.sf_rot_value1)
        self.firsthinge = Hinge()
        self.firsthinge.my_constructor(
            PARENT_NODE = self.base_node,
            DIAMETER = 0.05, # in meter
            HEIGHT = 0.01, # in meter
            ROT_OFFSET_MAT = avango.gua.make_identity_mat(), # the rotation offset relative to the parent coordinate system
            ROT_AXIS = avango.gua.Vec3(0,1,0), # the axis to rotate arround with the rotation input (default is head axis)
            ROT_CONSTRAINT = [-180.0, 180.0], # intervall with min and max rotation of this hinge
            BASE = True
            )
        self.firsthhinge_node = self.firsthinge.get_hinge_node()



        ## ToDo: init first arm-segment
        # ...
        self.firstarm = Arm(
            PARENT_NODE = self.firsthhinge_node,
            DIAMETER = 0.005, # in meter
            LENGTH = 0.075, # in meter
            ROT_OFFSET_MAT = avango.gua.make_identity_mat(), # the rotation offset relative to the parent coordinate system
            )
        self.firstarm_node = self.firstarm.get_arm_node()
        self.firstarm_node.Transform.value = avango.gua.make_trans_mat(0,0.04,0)



        ## ToDo: init second hinge && connect rotation input 
        # ...
        self.secondhinge = Hinge()
        self.secondhinge.my_constructor(
            PARENT_NODE = self.firstarm_node,
            DIAMETER = 0.02, # in meter
            HEIGHT = 0.02, # in meter
            ROT_OFFSET_MAT = avango.gua.make_identity_mat(), # the rotation offset relative to the parent coordinate system
            ROT_AXIS = avango.gua.Vec3(0,0,1), # the axis to rotate arround with the rotation input (default is head axis)
            ROT_CONSTRAINT = [-0.0, 90.0], # intervall with min and max rotation of this hinge
            )
        self.secondhinge_node = self.secondhinge.get_hinge_node()
        self.secondhinge_node.Transform.value = avango.gua.make_trans_mat(0,0.04,0)



        ## ToDo: init second arm-segment
        # ...
        self.secondarm = Arm(
            PARENT_NODE = self.secondhinge_node,
            DIAMETER = 0.005, # in meter
            LENGTH = 0.075, # in meter
            ROT_OFFSET_MAT = avango.gua.make_identity_mat(), # the rotation offset relative to the parent coordinate system
            )
        self.secondarm_node = self.secondarm.get_arm_node()
        self.secondarm_node.Transform.value = avango.gua.make_trans_mat(0,0.04,0)
        

        ## ToDo: init third hinge && connect rotation input 
        # ...
        self.thirdhinge = Hinge()
        self.thirdhinge.my_constructor(
            PARENT_NODE = self.secondarm_node,
            DIAMETER = 0.02, # in meter
            HEIGHT = 0.02, # in meter
            ROT_OFFSET_MAT = avango.gua.make_identity_mat(), # the rotation offset relative to the parent coordinate system
            ROT_AXIS = avango.gua.Vec3(0,0,1), # the axis to rotate arround with the rotation input (default is head axis)
            ROT_CONSTRAINT = [-90.0, 90.0], # intervall with min and max rotation of this hinge
            )
        self.thirdhinge_node = self.thirdhinge.get_hinge_node()
        self.thirdhinge_node.Transform.value = avango.gua.make_trans_mat(0,0.04,0)

        ## ToDo: init third arm-segment
        # ...
        self.thirdarm = Arm(
            PARENT_NODE = self.thirdhinge_node,
            DIAMETER = 0.005, # in meter
            LENGTH = 0.075, # in meter
            ROT_OFFSET_MAT = avango.gua.make_identity_mat(), # the rotation offset relative to the parent coordinate system
            )
        self.thirdarm_node = self.thirdarm.get_arm_node()
        self.thirdarm_node.Transform.value = avango.gua.make_trans_mat(0,0.04,0)


        ## ToDo: init hook
        self.firsthook = Hook()
        self.firsthook.my_constructor(
        PARENT_NODE = self.thirdarm_node,
        SIZE = 0.03,
        TARGET_LIST = self.targets,
        #TARGET_LIST = []
        )
        self.firsthook_node = self.firsthook.get_hook_node()
        self.firsthook_node.Transform.value = avango.gua.make_trans_mat(0,0.045,0)
예제 #9
0
    def __init__(self,
        PARENT_NODE = None,
        TARGET_LIST = [],
        ):

        
        ### resources ###

        ## init base node for whole crane
        self.base_node = avango.gua.nodes.TransformNode(Name = "base_node")
        self.base_node.Transform.value = avango.gua.make_trans_mat(0.0,-0.1,0.0)
        PARENT_NODE.Children.value.append(self.base_node)


        ## init internal sub-classes
        self.input = KeyboardInput()


        ## ToDo: init first hinge && connect rotation input 
        self.hinge1 = Hinge()
        self.hinge1.my_constructor(PARENT_NODE = self.base_node, DIAMETER = 0.1, HEIGHT = 0.01, \
            ROT_OFFSET_MAT = avango.gua.make_identity_mat(), ROT_AXIS = avango.gua.Vec3(0,1,0), \
            ROT_CONSTRAINT = [-180.0, 180.0])
        self.hinge1.sf_rot_value.connect_from(self.input.sf_rot_value0)

        #self.hinge1.connect_from(self.KeyboardInput.Button1) 


        ## ToDo: init first arm-segment
        # ...
        self.arm1 = Arm(PARENT_NODE = self.hinge1.get_hinge_transform_node(), DIAMETER = 0.01, LENGTH = 0.1, ROT_OFFSET_MAT = avango.gua.make_identity_mat())


        ## ToDo: init second hinge && connect rotation input 
        # ...
        self.hinge2 = Hinge()
        self.hinge2.my_constructor(PARENT_NODE = self.hinge1.get_hinge_transform_node(), DIAMETER = 0.02, HEIGHT = 0.01, \
            ROT_OFFSET_MAT = avango.gua.make_rot_mat(90, 1, 0, 0), ROT_AXIS = avango.gua.Vec3(0,0,1), \
            ROT_CONSTRAINT = [0.0, 90.0], TRANS_OFFSET = self.arm1.length)
        self.hinge2.sf_rot_value.connect_from(self.input.sf_rot_value1)


        # # ## ToDo: init second arm-segment
        # # # ...
        self.arm2 = Arm(PARENT_NODE = self.hinge2.get_hinge_transform_node(), DIAMETER = 0.01, LENGTH = 0.1, ROT_OFFSET_MAT = avango.gua.make_identity_mat())
        

        # # ## ToDo: init third hinge && connect rotation input 
        # # # ...
        self.hinge3 = Hinge()
        self.hinge3.my_constructor(PARENT_NODE = self.hinge2.get_hinge_transform_node(), DIAMETER = 0.02, HEIGHT = 0.01, \
            ROT_OFFSET_MAT = avango.gua.make_rot_mat(90, 1, 0, 0), ROT_AXIS = avango.gua.Vec3(0,0,1), \
            ROT_CONSTRAINT = [-90.0, 90.0], TRANS_OFFSET = self.arm2.length)
        self.hinge3.sf_rot_value.connect_from(self.input.sf_rot_value2)


        # # ## ToDo: init third arm-segment
        # # # ...
        self.arm3 = Arm(PARENT_NODE = self.hinge3.get_hinge_transform_node(), DIAMETER = 0.01, LENGTH = 0.1, ROT_OFFSET_MAT = avango.gua.make_identity_mat())


        # # ## ToDo: init hook
        # # # ...
        self.hook = Hook()
        self.hook.my_constructor(PARENT_NODE = self.hinge3.get_hinge_transform_node(), SIZE = 0.025, TARGET_LIST = TARGET_LIST, OFFSET = self.arm3.length)
        self.hook.sf_mat.connect_from(self.hook.hook_geometry.WorldTransform)
예제 #10
0
    def __init__(
            self,
            PARENT_NODE=None,
            TARGET_LIST=[],  # required for bounding box intersection in Hook class 
    ):

        ## init base node for whole crane
        self.base_node = avango.gua.nodes.TransformNode(Name="base_node")
        self.base_node.Transform.value = avango.gua.make_trans_mat(
            0.0, -0.1, 0.0)
        PARENT_NODE.Children.value.append(self.base_node)

        ## init internal sub-classes
        self.input = KeyboardInput()

        ## first hinge
        self.hinge0 = Hinge(
            PARENT_NODE=self.base_node,
            DIAMETER=0.1,
            HEIGHT=0.01,
            ROT_OFFSET_MAT=avango.gua.make_identity_mat(),
            SF_ROT_INPUT=self.input.sf_rot_input0,
        )

        ## first arm segment
        self.arm0 = Arm(
            PARENT_NODE=self.hinge0.hinge_node,
            LENGTH=0.12,
            DIAMETER=0.01,
            ROT_OFFSET_MAT=avango.gua.make_identity_mat(),
        )

        ## second hinge
        self.hinge1 = Hinge(
            PARENT_NODE=self.arm0.arm_end_node,
            DIAMETER=0.04,
            HEIGHT=0.01,
            ROT_OFFSET_MAT=avango.gua.make_rot_mat(90.0, 1, 0, 0),
            SF_ROT_INPUT=self.input.sf_rot_input1,
            MIN_ANGLE=-45,
            MAX_ANGLE=45,
        )

        ## second arm segment
        self.arm1 = Arm(
            PARENT_NODE=self.hinge1.hinge_node,
            LENGTH=0.09,
            DIAMETER=0.007,
            ROT_OFFSET_MAT=avango.gua.make_rot_mat(45.0, 0, 1, 0) *
            avango.gua.make_rot_mat(-90.0, 1, 0, 0),
        )

        ## third hinge
        self.hinge2 = Hinge(
            PARENT_NODE=self.arm1.arm_end_node,
            DIAMETER=0.03,
            HEIGHT=0.01,
            ROT_OFFSET_MAT=avango.gua.make_rot_mat(90.0, 1, 0, 0),
            SF_ROT_INPUT=self.input.sf_rot_input2,
            MIN_ANGLE=-135,
            MAX_ANGLE=45,
        )

        ## third arm segment
        self.arm3 = Arm(
            PARENT_NODE=self.hinge2.hinge_node,
            LENGTH=0.07,
            DIAMETER=0.007,
            ROT_OFFSET_MAT=avango.gua.make_rot_mat(45.0, 0, 1, 0) *
            avango.gua.make_rot_mat(-90.0, 1, 0, 0),
        )

        ## Hook
        self.hook = Hook()
        self.hook.my_constructor(
            PARENT_NODE=self.arm3.arm_end_node,
            SIZE=0.02,
            TARGET_LIST=TARGET_LIST,
        )