Jump to content

  • Log In with Google      Sign In   
  • Create Account


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


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 PrestoChung   Members   -  Reputation: 177

Like
0Likes
Like

Posted 19 October 2013 - 10:41 PM

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, 19 October 2013 - 10:42 PM.


Sponsor:

#2 Dirk Gregorius   Members   -  Reputation: 714

Like
0Likes
Like

Posted 20 October 2013 - 11:47 AM

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, 20 October 2013 - 03:23 PM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS