1 / 26

Collision Detection

Collision Detection. Presented by Jerry Ashcroft-Thew. What is collision?. Physics. the meeting of particles or of bodies in which each exerts a force upon the other, causing the exchange of energy or momentum.

Download Presentation

Collision Detection

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.


Presentation Transcript

  1. Collision Detection Presented by Jerry Ashcroft-Thew

  2. What is collision? • Physics. the meeting of particles or of bodies in which each exerts a force upon the other, causing the exchange of energy or momentum. • Games. When two objects attempt to occupy the same space in the coordinate planes, or world.

  3. When does collision matter? • Preventing two objects from ghosting through each other • Prevent an object from simply hovering when it should fall • Detect projectile contact for “hit” vs “miss” • When might you NOT want collision, when it would occur in real life?

  4. Components of Collision • Detecting if a collision occurred • Reacting accordingly • Discovering if a collision has occurred is the basis of this problem.

  5. Detecting collision • The first step is to find out if the camera or player will pass through any polygons or planes on its next move • All polygons are extended indefinitely along their plane. If the camera does not intersect the plane, then no calculations are necessary (less processing). When a collision with the plane is detected, then check if the camera intersects the polygon itself.

  6. 2D Collisions • Much easier to detect • World can be represented by 2D array grid

  7. Tile Example • Detecting collisions with tiles • Player occupies one tile, all objects made up of tile sized pieces • When the player moves, check if the new tiles it occupies contains any objects we want to collide with instead. • Update player position accordingly

  8. Collision Detection Mathematics • Vector - directed line segment with magnitude and direction. i.e. angle and length or distance. • Vector can also represent force or speed of an object • A scalar, as opposed to a vector, has magnitude, but not direction.

  9. Vectors • Different ways to express vectors: • V = P2 - P1 • V = (x2 - x1, y2 - y1) • V = (Vx, Vy) • A 2D world has only x and y components, whereas a 3D world adds the z axis and another component to each vector.

  10. Vectors cont. • Vectors determine how far apart objects. • The length of the vector can be found by the distance formula for two points • 2D Vector: |V| = sqrt(Vx2 + Vy2) • 3D Vector: |V| = sqrt(Vx2 + Vy2 + Vz2)

  11. Normalizing Vectors • Off topic, but still important • Divide each component of the vector by its magnitude. • Creates Unit Vector • A plane's normal unit vector is important to provide realistic lighting and collision detection.

  12. The discrete time issue: • What if objects collide between updates? • Imagine the following 2D scene: a black ball is standing still, • and a white ball moves quickly towards the black ball • If the white ball can cover more pixels in one frame than the black ball's diameter, we may not detect the collision

  13. Solution: • Keep track of distance between relevant objects • If distance suddenly changes sign, i.e. becomes negative, we have passed through the object

  14. Quick collision detection • Use Bounding Geometric shapes • If general shapes collide, assume collision occurred. • Sphere or circle, Cylinder or rectangle • Not very precise…

  15. Sphere-Plane method • Uses the quick collision detection, but with polygons of the environment • Test if player-sphere intersects the plane of an objects polygon • The viewer or camera can be thought of as one solid entity, such as a ball, instead of a creature with several limbs.

  16. Sphere-Plane cont. • Easier to calculate – all points on the sphere are equidistant from center • Thus it is easy to determine if an object intersected with the sphere • If distance to an object is less than or equal to radius, then collision occurred, and we react accordingly

  17. Main point – don’t get too close! • Use planar equation Ax+By+Cz+D = 0 to determine normal vector, <A,B,C> • To find distance between sphere and plane of an objects surface, dot product the normal vector with the position of the sphere, or its center • Distance = Normal Vector of Plane DOT Position of Center of Sphere

  18. The distance will be either positive or negative, depending on the side of the plane you are on. – Useful for the discrete time issue mentioned before • If the distance becomes less than the radius of the sphere, or if the sign of the distance vector to the wall changes, a collision has occurred

  19. Reacting Accordingly • What are our options? • Stop altogether • Slide along surface • Slow down and push object • Bounce off object • Sink into object • Pass through object and ignore collision

  20. The Sliding Plane • The plane with which we will continue our movement • Sliding Plane = Tangent plane to place on sphere which collides with the object Images taken from http://www.peroxide.dk/papers/collision/collision.pdf

  21. To find the tangent plane, we need 2 things • Normal vector • Point on plane • Point on plane is point of intersection • Normal vector is simply vector from edge of sphere (our point of intersection) to center of sphere • Now we have the tangent plane, and thus the plane to move along after a collision!

  22. Sliding the Sphere • Move as close to surface as possible • Find sliding plane • Project original velocity onto sliding plane to get new position • Make new velocity vector by finding distance from collision point to new position • Recursively call the entire collision detection routine with the new position and the new velocity vector.

  23. Recursively call the collision function and check ALL nearby surfaces again. • Continue until: • No more collision is detected, or • Velocity vector is very small • Run into a corner, don’t want to slide through one wall because it was ignored. • More directly we hit a wall, the less we slide along its surface!

  24. Gravity • Very easy once you have a working collision function • Just call the function twice, once with the velocity vector, and once with the gravity vector • Allows for climbing stairs and ramps, or falling from heights with automatic acceleration • NOTE: PAY ATTENTION!

  25. Homework • When might you NOT want collision in a game, when it would occur in real life? • What is the limiting factor with combining gravity and velocity vectors into one call of the collision function instead of separating it out?

  26. References • http://www.peroxide.dk/papers/collision/collision.pdf • http://www.edenwaith.com/products/pige/tutorials/collision.php • http://www.dictionary.com • Google image search

More Related