PDA

View Full Version : Collision with child nodes


rubberpimple
09-10-2008, 04:27 PM
Hi,

A previous thread went as follows:

Initial Question:
is it possible to detect collision between specific bone of the 5DT glove's hand model and some other objects ? When I try to apply collision mesh directly on a specific bone, it says that VizBone object has no attribute collideMesh. Is there some other way, then ?

Farshizzo, your reply was:
You cannot perform collision on bones, only the entire avatar mesh. Are you trying to detect when the fingers touch something? If so, you can create an empty group node with a collision shape similar to the finger, then before performing collision detection you can manually place the group node at the current finger bone location. Either way, if you can describe what you are trying to accomplish I can provide you with some sample code.

I tried to reply to the post, but it doesn't seem to have bee noticed. I repeated my original question below:
I'd love to see the code for this. I'm trying to do collision detection between a hand model and specific child nodes of a parent object. Did I read somewhere that I can only do collision detection on nodes that are children of viz.WORLD?

Thanks!

Jeff
09-11-2008, 04:40 PM
Thanks for the post. Sorry, we have not had time to answer yet. We will respond tomorrow or early next week.

rubberpimple
09-12-2008, 03:17 PM
Cool...looking forward to it!

Jeff
09-15-2008, 04:36 PM
In response to collision detection on child nodes this should not be a problem. As long as you have your callback function for collision events and you have enabled collision notification on the node that will generate the event <VizNode>.enable( viz.COLLIDE_NOTIFY ) it should work.

As for the code, we have not forgotten your request. I don't think I can help with that but when Farshizzo has some time he will be able to help you out.

farshizzo
09-17-2008, 04:27 PM
I don't have a fully working example to show you, but the concept is very simple. First create an empty group node and define a collision shape that matches the bone you are interested in:boneCollide = viz.addGroup()
boneCollide.collideBox([0.1,0.1,0.2])Then when you want to check for collisions with the bone, just get the position of the bone in world coordinates and update the boneCollide object with it:boneCollide.setPosition(bone.getPosition(viz.AV ATAR_WORLD))
boneCollide.setQuat(bone.getQuat(viz.AVATAR_WORLD) )

#Perform collision detection
nodes = viz.phys.intersectNode(boneCollide)
for n in nodes:
print 'bone collided with',nDoes this help you?