WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Collision detection with specific models (https://forum.worldviz.com/showthread.php?t=1801)

just alex 02-03-2009 03:34 PM

Collision detection with specific models
 
Is it possible to have collision detection on only certain objects? In my specific code, I only want collisions between the subject and either the people avatars or the car.

I've also run into an issue on my keydown functions and I don't know why. Since adding the car model, none of my keydowns work anymore. Would it be because I haven't finished writing the car's keydown function, or is there some other problem that I missed?
thanks
-Alex
Code:

    import viz
    import math
    import vizmat
    import vizinfo
    import vizact
    from lookingat import LookingAt
    viz.go(viz.FULLSCREEN)



    #adds the ppt
    PORT_PPT = 1
    ppt = viz.add('vizppt.dls')

    ppt.command(3,"",3,1,3) #scales ppt tracking on xyz axis

    viz.eyeheight(0)

    #collisions on
    viz.collision(viz.ON)
    view = viz.get(viz.MAIN_VIEWPOINT)
    view.rotate(0,1,0,90)


    #This function is called when a collision occurs
    def mycollision(info):
        print 'Collided'


    #Create a callback for a collision event
    viz.callback(viz.COLLISION_EVENT, mycollision)

    PORT_INTERSENSE = 2
    isense = viz.add('intersense.dls')
    tracker = viz.add('intersense.dls')
    viz.tracker()
    tracker.reset()

    def mykeyboard(key):
     
        #If the R key is pressed, reset the head orientation
        if key in ['r','R']:
            tracker.reset()

    #Create a keyboard callback
    viz.callback(viz.KEYBOARD_EVENT,mykeyboard)


    #Add the street and drop it a little bit to be below the avatars feet.
    street = viz.add('objects/bspcity.bsp')
    street.translate(0,-.2,0)


    males = []
    females = []
    walking = []
    whichturn = 0

    #List the timers.
    WALKING = 0
    DRIVING = 1
    MALEMEETING = 3
    FEMALEMEETING = 4
    THROWINGMAN =7
    HOLDVIEW = 8
    TIMING = 9

    #Add the heads for the males.
    maleheads = ['Male/heads/M-015-2L.vzf','Male/heads/M-056L.vzf', 'Male/heads/M-063L.vzf']
    femaleheads = []
    bodyparts = ['male_legs.cmx','male_torso_LS.cmx','male_shoes.cmx']
    maleclothes = ['Male/clothes/male1.jpg','Male/clothes/male2.jpg','Male/clothes/male3.jpg']
    #Make some avatars.
    for i in range(2):
        male = viz.add('male.cfg')
        male.translate(i,0,0)
        male.visible(0,'male_head.cmx')
        male.face(maleheads[i])
        clothes = viz.add(maleclothes[i])
        for j in bodyparts:
            male.texture(clothes,j)
        males.append(male)
         
    for i in range(2):
        female = viz.add('female.cfg')
        female.translate(i,0,0)
        females.append(female)



    #Set up paramters for walking guy.
    males[0].translate(0,0,-5)
    males[0].rotate(0,1,0,-90)
    males[0].whichturn = 0
    males[0].set = [[1.5,0,-5],[1.5,0,15],[5,0,15],[-5,0,-5]]
    males[0].end = 4
    walking.append(males[0])

    #Set up paramters for walking girl.
    females[0].translate(1,0,-7)
    females[0].rotate(0,1,0,-90)
    females[0].whichturn = 0
    females[0].set = [[1.5,0,0],[1,0,15],[2,0,15],[-5,0,-5]]
    females[0].end = 4
    walking.append(females[0])

    #Add car.
    car = viz.add('mini.osgx')

    #set car stuff
    car.translate(-1.5,0,8)

    car.rotate(0,1,0,180)





    #Set up for meeting.
    males[1].translate(-9,0,21)
    females[1].translate(2,0,7)
    females[1].state(1)
    malemoves = [2,2,4,4,2,4,4,4,4,4,4,2,2,12]
    femalemoves = [6,5,12,12,1]
    females[1].rotate(0,1,0,-55)
    males[1].rotate(0,1,0,135)
    males[1].state(1)



    #Set up for throwing man.
    males[2].translate(11,0,7)
    males[2].state(1)

    #Set up for timing.
    timebomb = 0


    def onkeydown(key):
        if key == '0':
            viz.starttimer(WALKING, .1, viz.PERPETUAL)
         
         
        if key == '9':
            females[1].addAction(6)
            males[1].goto(1.6,0,7.7)
            females[1].spinto(0,1,0,-55)
            females[1].state(12)
            viz.starttimer(MALEMEETING,.1)
            viz.starttimer(FEMALEMEETING,.1)
         
         
          if key == '8':
              viz.starttimer(THROWINGMAN,.1)
         
          if key == '7':
              viz.starttimer(DRIVING,.1)

          if key == 's':
              print 's'
              viz.starttimer(TIMING,1, viz.PERPETUAL)
             
      def ontimer(num):
          global gravity, timebomb
         
          if num == DRIVING:
                for
         
          if num == WALKING:
              for agent in walking:
                  agentposition = agent.get(viz.POSITION)
                  agentgap = vizmat.Distance(agentposition,agent.set[agent.whichturn])
                  if agentgap < .1:
                      agent.whichturn += 1
                      if agent.whichturn == agent.end:
                          agent.whichturn = 0
                 
                  walk = vizact.walkto(agent.set[agent.whichturn][0],agent.set[agent.whichturn][1],agent.set[agent.whichturn][2])
                    agent.addAction(walk)
                 
                 
          if num == MALEMEETING:
              if len(malemoves)>1:
                  animation = malemoves.pop(0)
                  duration = males[1].getduration(animation)
                  males[1].execute(animation)
                  viz.starttimer(MALEMEETING, duration-.15)
                else:
                    animation = malemoves.pop(0)
                    males[1].state(animation)

            if num == FEMALEMEETING:
                if len(femalemoves)>1:
                    animation = femalemoves.pop(0)
                    duration = females[1].getduration(animation)
                    females[1].execute(animation)
                    viz.starttimer(FEMALEMEETING, duration-.15)
                else:
                    animation = femalemoves.pop(0)
                    females[1].state(animation)
         
         
            if num == THROWINGMAN:
                males[2].execute(9)
                males[2].execute(1)
                viz.starttimer(THROWINGMAN, 10)
         
            if num == HOLDVIEW:
                view.translate(-8.5,1.5,-2)
             
            if num == TIMING:
                print timebomb
                timebomb += 1
             
                if timebomb == 1:
                    onkeydown('0')
                 
                elif timebomb == 3:
                    onkeydown('4')
             
                elif timebomb == 10:
                    onkeydown('2')
             
                elif timebomb == 20:
                    onkeydown('3')
             
                elif timebomb == 30:
                    onkeydown('1')
             
                elif timebomb == 80:
                    viz.quit()
         
        viz.callback(viz.TIMER_EVENT,ontimer)

        viz.callback(viz.KEYDOWN_EVENT,onkeydown)
        viz.starttimer(HOLDVIEW,.001, viz.PERPETUAL)


Jeff 02-06-2009 11:02 AM

If you have viewpoint collision on you can disable collision with an object by using

Code:

.disable(viz.INTERSECTION)
It looks like you have two keyboard callbacks that are conflicting.
Code:

viz.callback(viz.KEYBOARD_EVENT,mykeyboard)
viz.callback(viz.KEYDOWN_EVENT,onkeydown)

I think the one that's listed first will not be called


All times are GMT -7. The time now is 10:21 AM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC