Collision Detection and Response
Motivation OpenGL is a rendering system OpenGL is a rendering system OpenGL has no underlying knowledge of the objects it draws OpenGL has no underlying knowledge of the objects it draws Collision Detection == Intersection Detection Collision Detection == Intersection Detection
Motivation Collision Detection Collision Detection Identifying the intersection of 3D models Identifying the intersection of 3D models Collision Response Collision Response Calculating the appropriate post collision response of the 3D models Calculating the appropriate post collision response of the 3D models Assumptions Assumptions Closed 3D polygonal objects Closed 3D polygonal objects
Overall Approach Where is collision detection and response in code? Where is collision detection and response in code? In animation function In animation function Usually in Idle or Display Usually in Idle or Display Update object positions Update object positions If (CollisionDetection()) If (CollisionDetection()) Collision Response() Collision Response() Draw Objects Draw Objects
Collision Detection Basic Collision Detection function Basic Collision Detection function for (i=0;i<num_of_objects-1;i++) for (i=0;i<num_of_objects-1;i++) for (j=i+1;j<num_of_objects;j++) for (j=i+1;j<num_of_objects;j++) X=TestIntersection(Object I, Object j) X=TestIntersection(Object I, Object j) If (x==1) return 1; If (x==1) return 1;
Collision Detection Packages SWIFT++ SWIFT Works on ‘polygon soup’ Works on ‘polygon soup’
Why is collision detection difficult? Too many calculations Too many calculations Reduce # of calculations Reduce # of calculations Accuracy Accuracy Accept approximations Accept approximations Lots of poor cases Lots of poor cases Guarantee detection? Guarantee detection? Accuracy requirements? Accuracy requirements? ex.shtml ex.shtml
Reduce Calculations Reduce object complexity Reduce object complexity Test with only other objects that might be within collision spaces Test with only other objects that might be within collision spaces Spatial divisions Spatial divisions Pre-process vs. runtime Pre-process vs. runtime
Approximate Object Shape For many applications, it is not necessary to get absolute collision detection accuracy For many applications, it is not necessary to get absolute collision detection accuracy How can we approximate the shape? How can we approximate the shape?
Bounding Boxes Calculate a 3D box that bounds the object Calculate a 3D box that bounds the object In the collision detection test, use the 3D box to test for collision in place of the full model In the collision detection test, use the 3D box to test for collision in place of the full model Two types Two types Axis Aligned Axis Aligned Bounding boxes are aligned w/ the world coordinate axes Bounding boxes are aligned w/ the world coordinate axes Object Aligned Object Aligned Bounding boxes are aligned w/ the object coordinate axes Bounding boxes are aligned w/ the object coordinate axes
Axis Aligned Bounding Boxes How do we calculate a AABB? How do we calculate a AABB? Take max and min for each dimension Take max and min for each dimension Pros Pros Very fast Very fast Works for many situations Works for many situations Cons Cons Collision detection accuracy reduced for many cases Collision detection accuracy reduced for many cases
Axis Aligned Bounding Boxes How do we calculate intersections? How do we calculate intersections? Calculate overlap for the min-max range for each dimension Calculate overlap for the min-max range for each dimension Pros Pros Very fast Very fast Works for many situations Works for many situations Cons Cons Collision detection accuracy reduced for many cases Collision detection accuracy reduced for many cases
Object-Aligned Bounding Boxes Calculate BB based on object’s primary dimensions Calculate BB based on object’s primary dimensions Object’s dimensions could be encoded in model or calculated real-time Object’s dimensions could be encoded in model or calculated real-time Apply M matrix to bounding box coordinates Apply M matrix to bounding box coordinates
Other bounding shapes Boxes Boxes Cubes Cubes Cylinders Cylinders Polygons Polygons User-defined shapes User-defined shapes Should be easy to calculate and test Should be easy to calculate and test
Bounding Box Approach Test collisions with BB Test collisions with BB Can either report collision Can either report collision Or then calculate more accurate collision Or then calculate more accurate collision Benefits of this include more accurate response Benefits of this include more accurate response
Poor cases Thin objects Thin objects
Poor cases Numerical Precision Numerical Precision
Collision Response Assuming rigid bodies Assuming rigid bodies Idea is to “rewind time” and to point of collision and calculate resulting location Idea is to “rewind time” and to point of collision and calculate resulting location
Why is collision response difficult? Resolving interpenetration is difficult Resolving interpenetration is difficult Multiple objects Multiple objects
Numerical Imprecision Vibrations Vibrations Solutions? Minimum delta Solutions? Minimum delta