Sign in to follow this  
PrestoChung

Continuous Collision Detection of 3-dimensional Convex Hulls with Rotation and Translation

Recommended Posts

I am looking for methods that take into account rotation as well as translation for continuous collision detection.

 

My broad phase algorithm uses swept maximal bounding spheres returning a start time when the objects will be within their maximum radius.

I have two ideas how to handle the next phase of collision detection:

1 ignore rotation:
A simplified collision I am considering is to ignore rotation from the beginning of the narrow phase and use a GJK representation to raycast the relative motion of the objects to the origin. This should give an intersection time by a raycast against a convex hull. This method will result in colliding objects to stop rotating for a portion of the time step, and can miss collision due to rotation over the timestep.

2 bisection search:
Doing a bisection search of instantaneous GJK tests at increasingly smaller intervals, presumably down to a fixed size. If a collision is detected then only earlier points in the bisection need be considered (reducing the search space), but to rule out collision completely the full space needs to be searched. This seems fairly expensive and can still miss collisions where the periodicity of motion is between the test points.

 

I have found some indication that dual numbers or dual quaternions + screw theory may have some application but it seems like an advanced topic and so far the only game-related application I have found is in mesh deformation, not collision detection. Screw theory seems promising, but I'm not sure it applies to situations where the axis of rotation is not the same as the axis of translation, or if that is just a sub-set of certain screw motions.

 

Some possible resources:

http://www.seas.upenn.edu/~meam520/notes02/RigidBodyMotion3.pdf

http://link.springer.com/chapter/10.1007%2F978-3-642-16135-3_18

https://www.springer.com/computer/image+processing/book/978-1-4471-2339-2

Edited by PrestoChung

Share this post


Link to post
Share on other sites

I recommend using Erin Catto's approach that he introduced at the GDC this year:

https://code.google.com/p/box2d/downloads/detail?name=ErinCatto_GDC2013.zip&can=2&q=

 

It is conceptually a hybrid of Brian Mirtich's conservative advancement method and bisection. I ported it to 3D and it works great in practice. The edge distance function in 3D is non-trivial though (it is non convex function), but I am sure you can figure it out.

 

You can find a 2D reference implementation in the Box2D source. You can find good discussions of conservative advancement here:

http://www.cs.berkeley.edu/~jfc/mirtich/impulse.html

 

In my *personal* experience the original conservative advancement is too slow for real-time simulation. Worst cases like a rigid body rotating over the edge of another one are a common situation in games and take hundreds of iterations. E.g. a book falling of a table. 

 

HTH,

Dirk

Edited by Dirk Gregorius

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this