WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 02-03-2009, 04:34 PM
just alex just alex is offline
Member
 
Join Date: Nov 2008
Posts: 18
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)
Reply With Quote
  #2  
Old 02-06-2009, 12:02 PM
Jeff Jeff is offline
WorldViz Team Member
 
Join Date: Aug 2008
Posts: 2,471
If you have viewpoint collision on you can disable collision with an object by using

Code:
<node3D>.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
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Hand model collision detection. Lotar Vizard 6 04-23-2009 01:18 PM
Collision Detection and Nearest Point to Probe xabbu Vizard 2 01-06-2009 04:01 AM
Collision detection with haptic pen mjabon Vizard 3 01-17-2008 07:35 PM
problem with collision detection paulpars Vizard 6 06-09-2006 07:03 PM
Walking avatars --> collision detection? sjroorda Vizard 3 10-13-2005 05:47 AM


All times are GMT -7. The time now is 05:46 PM.


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