#1
|
|||
|
|||
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) |
#2
|
|||
|
|||
If you have viewpoint collision on you can disable collision with an object by using
Code:
<node3D>.disable(viz.INTERSECTION) Code:
viz.callback(viz.KEYBOARD_EVENT,mykeyboard) viz.callback(viz.KEYDOWN_EVENT,onkeydown) |
|
|
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 |