WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 05-24-2010, 02:13 AM
CarlosRamos CarlosRamos is offline
Member
 
Join Date: Feb 2010
Posts: 2
Collision notifications

I'm using the collision notification mechanism in Vizard, and I want to detect if one object collides with another and apply a force if that happens. But the problem is I can't identify the object. For example, let's say I have an object called "ball", and a object called "racket" already defined and loaded previously on the script, and with the viz.COLLIDE_NOTIFY flag enabled. Then I define the collide notification function:

Code:
def collideNot(e):
     if e.obj1 == ball or e.obj2 == ball:
         print "collision"
     else:
         print "no collision"
It always shows "no collision". Am I doing something wrong? Thanks in advance.
Reply With Quote
  #2  
Old 05-24-2010, 12:48 PM
Jeff Jeff is offline
WorldViz Team Member
 
Join Date: Aug 2008
Posts: 2,471
I'm not sure what's wrong without seeing more of the script. In the following example viz.COLLIDE_NOTIFY is enabled on the ball. When the ball collides with another object it will generate the collision event and show up as obj1 in the callback function. The object it collides with will be obj2.

Code:
import viz
viz.go()

viz.phys.enable() 

ground = viz.add('tut_ground.wrl') 
ground.collidePlane()   

ball = viz.add('ball.wrl',pos=(0,1.8,6)) 
ballPhys = ball.collideSphere(bounce=1.5)
ball.enable(viz.COLLIDE_NOTIFY)

def onCollide(e):
	if e.obj1 == ball:
		print 'ball collision'
	if e.obj2 == ground:
		print 'ground collision'
		
viz.callback( viz.COLLIDE_BEGIN_EVENT, onCollide )
Reply With Quote
  #3  
Old 05-25-2010, 02:02 AM
CarlosRamos CarlosRamos is offline
Member
 
Join Date: Feb 2010
Posts: 2
I didn't post more of the script because it's a mess right now Anyway, I think it was my fault... The thing I'm trying to do is to detect the collision with only a child of a model. I didn't mention that in my original post for the sake of simplicity, but after checking it, it seems that's the problem, the object I get on the collision event is the parent, not the child.

Code:
child = model.getChild("Plane06")
child.enable(viz.COLLIDE_NOTIFY)

...

def CollideNot(e):
     if e.obj2 == child:
         print "child"
     if e.obj2 == model:
         print "model"
It will print "model", but never "child". Is there any way to do this?
Reply With Quote
  #4  
Old 05-25-2010, 03:33 PM
Jeff Jeff is offline
WorldViz Team Member
 
Join Date: Aug 2008
Posts: 2,471
Collision shapes work with nodes that are childen of viz.WORLD, otherwise they will not be positioned properly.

You could use the method described in the following article:
http://kb.worldviz.com/articles/350
Reply With Quote
Reply

Thread Tools
Display Modes Rate This Thread
Rate This Thread:

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
Collision detection Moh200jo Vizard 1 01-27-2010 08:39 AM
Collision detection with specific models just alex Vizard 1 02-06-2009 12:02 PM
Collision with child nodes rubberpimple Vizard 4 09-17-2008 05:27 PM
Collision detection with haptic pen mjabon Vizard 3 01-17-2008 07:35 PM
collision events trigger Eunice Vizard 1 01-03-2006 11:39 AM


All times are GMT -7. The time now is 07:14 AM.


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