|
#1
|
|||
|
|||
real time collision on animation path
Hello,
I'd like to simulate some cars running on the road without crash. Cars are animated by animation path and those paths have intersection. I use .collideBox() and .enable(viz.COLLIDE_NOTIFY) for each car for collision. But I don't exactly know how to handle collision event in the callback function. Because once two cars are about to collide, I need one car to speed up and the other to slow down. But my program have no idea which car should speed up and which car should slow down. Does anybody have a solution for that? Thanks, whj |
#2
|
|||
|
|||
Thanks for the post. Sorry, we have not had time to answer yet. We will respond tomorrow or early next week.
|
#3
|
|||
|
|||
Hi,
After thinking it over, I feel I should not use collision in this case. Because I need to prevent crash instead of allowing collision. Is there any way I can calculate the position after a certain time, e.g. 2 seconds, when a car moving along the animation path according to its speed? Sorry about confusion. And thanks for your help in advance. |
#4
|
|||
|
|||
you could create a callback function that is called every time a timer expires. Within that function you could get the position of your cars and calculate the distance between them. If they are to close you could speed up the one in front and slow down the one behind.
Code:
import vizmat #start a timer that will call onTimer() every 2 seconds viz.starttimer(0,2,viz.FOREVER) def onTimer(num): car1_Pos = car1.getPosition() car2_Pos = car2.getPosition() distance = vizmat.Distance(car1_Pos, car2_Pos) if distance is too close: #increase speed of path of car1 #decrease speed of path of car2 viz.callback(viz.TIMER_EVENT,onTimer) is that helpful? |
#5
|
|||
|
|||
Sorry I didn't make it clear. I need to know the position in advance, like where the car could be in the next 2 seconds. So I can predict if they would crash. (I know your sample code is a way to predict crash based on distance. But my research need a way to predict crash based on time.) Since all cars have their defined paths and speed using animation path, I'm wondering if I can get the expected position beforehand? I really appreciate your help.
|
#6
|
|||
|
|||
You could try creating another animation path with identical control points. You can delay playing the second path by two seconds. The second path would have your car linked to it. The first path would have an empty group node linked to it. The group node, which is not visible, would always have the position two seconds ahead of your car. Just get its position anytime you need to make your calculation. If however you change the speed of your car's animation path, you will need to do the same for your group nodes path, so they will always be two seconds apart.
Here is some code with a semi-transparent ball two seconds ahead of another ball. You could replace the semi-transparent ball with an empty group node that just holds the position Code:
import viz viz.go() viz.add('tut_ground.wrl') #add a ball and make semi-transparent, this will be 2 seconds ahead of #ball2 ball = viz.add('ball.wrl') ball.alpha(.2) ball2 = viz.add('ball.wrl') #Move the viewpoint back viz.MainView.move(0,0,-8) #Create the animation paths path = viz.add(viz.ANIMATION_PATH) path2 = viz.add(viz.ANIMATION_PATH) #Initialize an array of control points positions = [ [0,0,2], [2,0,0], [0,0,-2], [-2,0,0] ] for x in range(0,len(positions)): cp = viz.add(viz.CONTROL_POINT) cp.setPosition(positions[x]) path.add(cp,x+1) path2.add(cp,x+1) #Set the initial loop mode to circular path.loop(viz.CIRCULAR) path2.loop(viz.CIRCULAR) #Automatically compute tangent vectors for cubic bezier translations path.computeTangents() path2.computetangents() #Automatically rotate the path path.setAutoRotate(viz.ON) path2.setAutoRotate(viz.ON) #Link ball and ball2 to their paths ball.link(path) ball2.link(path2) #start playing the first animation path immediately path.play() #start playing the second animation path after two seconds vizact.ontimer2(2, 1, path2.play) |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Real Time Audio Data | lomendil | Vizard | 2 | 06-02-2008 09:18 PM |
Can I get real time Intersense tracking data from another computer on the network? | GoldenSun | Vizard | 4 | 04-30-2008 08:42 PM |
timer question | Elittdogg | Vizard | 5 | 10-10-2007 03:49 PM |
Animation Path | djdesmangles | Vizard | 2 | 06-11-2007 04:37 PM |
Animation Path | djdesmangles | Vizard | 0 | 06-06-2007 12:03 PM |