Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!

1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!

Red Shark

Member Since 16 Dec 2012
Offline Last Active Jan 10 2013 10:07 PM

Topics I've Started

Is there a way to resolve collisions using MPR / XenoCollide?

16 December 2012 - 09:59 PM

I've spent the past two weeks mucking around with collision detection in my spare time. Unfortunately, I'm not sure that I'm even half-way to a fully robust solution, yet.

What I do have, is a working collision detection system - I've implemented a version of XenoCollide/ Minkowski Portal Refinement, and it is working acceptably well -- but at this point, all it's doing well is detecting.

I'm not looking to implement real physics, just to prevent objects from intersecting each other, so I was aiming for an update loop along the lines of this:
  • Add object position + velocity.x, and test that new value for collision.
  • if collision detected, subtract a value from Velocity.x so that the objects are touching instead of intersecting.
  • repeat step 1 & 2 for Z-axis.
  • repeat step 1 & 2 for Y-axis.
  • Add velocity to position.
It's that 2nd half of step 2 that I'm struggling with -- is there a way to use my MPR code to figure out how far along the axis I need to back track? Right now I'm getting a contact normal (i.e., the direction I need to adjust the velocity), but I can't figure out how to use that to calculate the appropriate distance.

Is there a way I can use MPR to calculate the appropriate offset to prevent the collision? Since I can guarantee that the two objects are colliding, is there another algorithm I can use to solve for the new positions of 2 convex polyhedra? (Cubes for now, but I'd like to be able to do arbitrary convex shapes)

Any help or feedback would be appreciated!