1

**SFML wiki / Rectangular Boundary Collision**

« **on:**July 11, 2017, 08:08:46 pm »

Rectangular Boundary Collision

SFML's sprites and shapes can provide you with their axis-aligned boundary boxes (getGlobalBounds) and you can easily use these rectangles to test if they intersect. Unfortunately, this only allows axis-aligned collision detection.

Rectangular Boundary Collision allows testing collision based on their original rectangular boundary box (getLocalBounds). It tests to see if an object's rectangular boundary collides with another object's rectangular boundary. This method, however, allows transformations to be taken into account - most notably, rotation.

Rectangular Boundary Collision is a single, templated free-function contained within the "collision" namespace:

You only

The collision is performed in three stages:

The collision level represents after which stage to leave the function, regardless of if a result is certain.

(red = collision, green = no collision)

Wiki page:

https://github.com/SFML/SFML/wiki/Source%3A-Rectangular-Boundary-Collision

GitHub repository (it's a part of SfmlSnippets):

https://github.com/Hapaxia/SfmlSnippets/tree/master/RectangularBoundaryCollision

Example used to create the above screenshots is included in the repository and also on the wiki page.

SFML's sprites and shapes can provide you with their axis-aligned boundary boxes (getGlobalBounds) and you can easily use these rectangles to test if they intersect. Unfortunately, this only allows axis-aligned collision detection.

Rectangular Boundary Collision allows testing collision based on their original rectangular boundary box (getLocalBounds). It tests to see if an object's rectangular boundary collides with another object's rectangular boundary. This method, however, allows transformations to be taken into account - most notably, rotation.

Rectangular Boundary Collision is a single, templated free-function contained within the "collision" namespace:

const bool spritesAreColliding = collision::areColliding(sprite1, sprite2);

You only

*need*the header, which is approximately 100 lines of code...The collision is performed in three stages:

- Level 0 - AABB (axis-aligned boundaries boxes):

tests the axis-aligned boundaries boxes (equivalent to getGlobalBounds) of the objects to see if they intersect. - Level 1 - Corner inside opposite object:

tests to see if any of either object's corner is inside the other object. - Level 2 - SAT (Separating Axis Theorem):

tests using a simplified version (for rectangles) of SAT to catch other cases.

The collision level represents after which stage to leave the function, regardless of if a result is certain.

(red = collision, green = no collision)

Wiki page:

https://github.com/SFML/SFML/wiki/Source%3A-Rectangular-Boundary-Collision

GitHub repository (it's a part of SfmlSnippets):

https://github.com/Hapaxia/SfmlSnippets/tree/master/RectangularBoundaryCollision

Example used to create the above screenshots is included in the repository and also on the wiki page.