Collisions using separating axis tests
Download
1 / 27

Collisions using separating-axis tests - PowerPoint PPT Presentation


  • 138 Views
  • Updated On :

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.

Related searches for Collisions using separating-axis tests

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Collisions using separating-axis tests' - sirius


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Collisions using separating axis tests l.jpg
Collisions using separating-axis tests

Christer EricsonSony Computer EntertainmentSlides @ http://realtimecollisiondetection.net/pubs/


Problem statement l.jpg
Problem statement

  • Determine if two (convex) objects are intersecting.

  • Possibly also obtain contact information.

?

!


Underlying theory l.jpg
Underlying theory

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


Underlying theory4 l.jpg
Underlying theory

  • Separating Hyperplane Theorem

    • States: two disjoint convex sets are separable by a hyperplane.


Underlying theory5 l.jpg
Underlying theory

  • Nonintersecting concave sets not generally separable by hyperplane (only by hypersurfaces).

  • Concave objects not covered here.


Underlying theory6 l.jpg
Underlying theory

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


Underlying theory7 l.jpg
Underlying theory

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


Testing separation l.jpg
Testing separation

  • Compare absolute intervals

Separated if

or


Testing separation9 l.jpg
Testing separation

  • For centrally symmetric objects: compare using projected radii

Separated if


Code fragment l.jpg
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);

}

}


Axes to test l.jpg
Axes to test

  • But which axes to test?

    • Potentially infinitely many!

  • Simplification:

    • Deal only with polytopes

      • Convex hulls of finite point sets

      • Planar faces


Axes to test12 l.jpg
Axes to test

  • Handwavingly:

    • Look at the ways features of A and B can come into contact.

      • Features are vertices, edges, faces.

      • 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.


Axes to test13 l.jpg
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.


Axes to test14 l.jpg
Axes to test

  • Four axes for two 2D OBBs:



Code fragment16 l.jpg
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;

}

Note: here objects assumed to be in the same space.


Moving objects l.jpg
Moving objects

  • When objects move, projected intervals move:


Moving objects18 l.jpg
Moving objects

  • Objects intersect when projections overlap on all axes.

  • If tifirst and tilast are time of first and last contact on axis i, then objects are in contact over the interval [maxi { tifirst}, mini { tilast}].

  • No contact if maxi { tifirst} > mini { tilast}


Moving objects19 l.jpg
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}


Nonpolyhedral objects l.jpg
Nonpolyhedral objects

  • What about:

    • Spheres, capsules, cylinders, cones, etc?

  • Same idea:

    • Identify all ‘features’

    • Test all axes that can possibly separate feature pairs!


Nonpolyhedral objects21 l.jpg
Nonpolyhedral objects

  • Sphere tests:

    • Has single feature: its center

    • Test axes going through center

    • (Radius is accounted for during overlap test on axis.)


Nonpolyhedral objects22 l.jpg
Nonpolyhedral objects

  • Capsule tests:

    • Split into three features

    • Test axes that can separate features of capsule and features of second object.


Nonpolyhedral objects23 l.jpg
Nonpolyhedral objects

  • Sphere vs. OBB test:

    • sphere center vs. box vertex

      • pick candidate axis parallel to line thorugh both points.

    • sphere center vs. box edge

      • pick candidate axis parallel to line perpendicular to edge and goes through sphere center

    • sphere center vs. box face

      • pick candidate axis parallel to line through sphere center and perpendicular to face

  • Use logic to reduce tests where possible.


Nonpolyhedral objects24 l.jpg
Nonpolyhedral objects

  • For sphere-OBB, all tests can be subsumed by a single axis test:

Closest point on OBB to sphere center


Robustness warning l.jpg
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!

(Address using means discussed earlier.)


Contact determination l.jpg
Contact determination

  • Covered by Erin Catto (later)


References l.jpg
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.