• Advertisement
Sign in to follow this  

PhysX 3: disabling collisions for a pair of shapes or actors?

This topic is 1982 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I want to temporarily disable collisions for projectiles and the like after spawning (potentially) within the bounds of the parent-object. Once the objects are sperated or if there was no initial intersection at all, I want to reenable collisions for that pair. The only way to do that I can think of right now would be to use shape-filter.data for that purpose and suppress collisions inside the filter-shader and send a notify-call on seperation, but that wouldn't be very elegant and I also wouldn't know, how to deal with the case, when the projectile is already seperated from the parent on spawning. Any ideas?

Share this post


Link to post
Share on other sites
Advertisement
If at least one of the objects is kinematic then it could ignore collisions after they are signaled.
For DYNamic objects, I have no idea as any kind of filtering will require quite some checks. I'm looking this thread as I'm interested.

Share this post


Link to post
Share on other sites
Ok, so I finally gave it a try this morning and here is what I've done.

I use words 2 and 3 of shape-filter-data as unique identifiers for the game-object (word2) that the shape(s) belong to and for the parent-object (word3), if I want to suppress initial-overlap collisions. I decided to use adresses as IDs and set them up in my objects' contruction with optional parent as parameter.

I had to derive from PxSimulationFilterCallback and use it in my scene-descriptor for the whole thing to work, even though I only implemented empty placeholder-functions.

Then inside the filter shader, for shape-pairs where data0-word2 == data1-word3 or the other way around, I raise the pairFlag eNOTIFY_TOUCH_LOST and return the filterFlags eKILL | eNOTIFY. This supresses the collision and makes sure that after seperation, the pair doesn't get ignored by the filter-shader anymore.

In my simulation order I let physx do exactly one simulation-step after I create new objects and setup their shape-filter-data and before I reset filter-word3 of every newly created shape back to zero. That means that the next time they collide, there is no parent-object to ignore collisions with anymore, regardless wether there was an initial overlap in the first frame or not.

I don't know, if there is a more efficient way of handling this, but it works for me without problems. Hope it helps!

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement