1 / 24

Collisions using separating-axis tests

Collisions using separating-axis tests. Christer Ericson Sony Computer Entertainment Slides @ http://realtimecollisiondetection.net/pubs/. Problem statement. Determine if two (convex) objects are intersecting. Possibly also obtain contact information. ?. !. Underlying theory.

kyria
Download Presentation

Collisions using separating-axis tests

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Collisions using separating-axis tests Christer EricsonSony Computer EntertainmentSlides @ http://realtimecollisiondetection.net/pubs/

  2. Problem statement • Determine if two (convex) objects are intersecting. • Possibly also obtain contact information. ? !

  3. Underlying theory • Set C is convex if and only if the line segment between any two points in C lies in C.

  4. Underlying theory • Separating Hyperplane Theorem • States: two disjoint convex sets are separable by a hyperplane.

  5. Underlying theory • Nonintersecting concave sets not generally separable by hyperplane (only by hypersurfaces). • Concave objects not covered here.

  6. Underlying theory • Separation w.r.t a plane P  separation of the orthogonal projections onto any line L parallel to plane normal.

  7. Underlying theory • A line for which the projection intervals do not overlap we call a separating axis.

  8. Testing separation • Compare absolute intervals Separated if or

  9. Testing separation • For centrally symmetric objects: compare using projected radii Separated if

  10. Code fragment void GetInterval(Object o, Vector axis, float &min, float &max) { min = max = Dot(axis, o.getVertex(0)); for (int i = 1, n = o.NumVertices(); i < n; i++) { float value = Dot(axis, o.getVertex(i)); min = Min(min, value); max = Max(max, value); } }

  11. Axes to test • But which axes to test? • Simplification: • Deal only with polytopes • Convex hulls of finite point sets • Planar faces

  12. Axes to test • Handwavingly: • Look at the ways A and B can come into contact. • In 3D, reduces to vertex-face and edge-edge contacts. • Vertex-face: • a face normal from either polytope will serve as a separating axis. • Edge-edge: • the cross product of an edge from each will suffice.

  13. Axes to test • Theoretically: • Consider the Minkowski difference C of A and B. • When A and B disjoint, origin outside C, specifically outside some face F. • Faces of C come from A, from B, or from sweeping the faces of either along the edges of the other. • Therefore the face normal of F is either from A, from B, or the cross product of an edge from either.

  14. Axes to test • Four axes for two 2D OBBs:

  15. Axes to test

  16. Code fragment bool TestIntersection(Object o1, Object o2) { float min1, max1, min2, max2; for (int i = 0, n = o1.NumFaceDirs(), i < n; i++) { GetInterval(o1, o1.GetFaceDir(i), min1, max1); GetInterval(o2, o1.GetFaceDir(i), min2, max2); if (max1 < min2 || max2 < min1) return false; } for (int i = 0, n = o2.NumFaceDirs(), i < n; i++) { GetInterval(o1, o2.GetFaceDir(i), min1, max1); GetInterval(o2, o2.GetFaceDir(i), min2, max2); if (max1 < min2 || max2 < min1) return false; } for (int i = 0, m = o1.NumEdgeDirs(), i < m; i++) for (int j = 0, n = o2.NumEdgeDirs(), j < n; j++) { Vector axis = Cross(o1.GetEdgeDir(i), o2.GetEdgeDir(j)); GetInterval(o1, axis, min1, max1); GetInterval(o2, axis, min2, max2); if (max1 < min2 || max2 < min1) return false; } return true; }

  17. Moving objects • When objects move, projected intervals move:

  18. Moving objects • Objects intersect when projections overlap on all axes. • Objects are in contact over the interval [maxi { tifirst}, mini { tilast}], where tifirst and tilast are time of first and last contact on axis i. • No contact if maxi { tifirst} > mini { tilast}

  19. Moving objects • Optimization 1: • Consider relative movement only. • Shrink interval A to point, growing interval B by original width of A. • Becomes moving point vs. stationary interval. • Optimization 2: • Exit as soon as maxi { tifirst} > mini { tilast}

  20. Nonpolyhedral objects • Spheres, capsules, cylinders, cones, etc. • E.g. sphere vs. OBB: Closest point on OBB to sphere center

  21. Nonpolyhedral objects • Capsule tests: • Split into three features • Test axes that can separate features of capsule and features of second object.

  22. Robustness warning • Cross product of edges can result in zero-vector. Typical test: if (Dot(foo, axis) > Dot(bar, axis)) return false; Becomes, due to floating-point errors: if (epsilon1 > epsilon2) return false; Results in: Chaos!

  23. Contact determination • Covered by Erin Catto (later)

  24. References • Ericson, Christer. Real-Time Collision Detection. Morgan Kaufmann 2005. http://realtimecollisiondetection.net/ • Levine, Ron. “Collisions of moving objects.” gdalgorithms-list mailing list article, November 14, 2000. http://realtimecollisiondetection.net/files/levine_swept_sat.txt • Boyd, Stephen. Lieven Vandenberghe. Convex Optimization. Cambridge University Press, 2004. http://www.stanford.edu/~boyd/cvxbook/ • Rockafellar, R. Tyrrell. Convex Analysis. Princeton University Press, 1996.

More Related