Search code examples
javaandroidcollision-detectionlibgdxgame-physics

Collision detection between a BoundingBox and a Sphere in libgdx


In my libgdx game I have 3D BoundingBoxes and Spheres for map and player objects. I want to calculate whether they collide with each other in order to properly simulate the motion of these objects. What method can I use to calculate whether these objects collide/intersect?


Solution

  • You can use the following method:

    public static boolean intersectsWith(BoundingBox boundingBox, Sphere sphere) {
        float dmin = 0;
    
        Vector3 center = sphere.center;
        Vector3 bmin = boundingBox.getMin();
        Vector3 bmax = boundingBox.getMax();
    
        if (center.x < bmin.x) {
            dmin += Math.pow(center.x - bmin.x, 2);
        } else if (center.x > bmax.x) {
            dmin += Math.pow(center.x - bmax.x, 2);
        }
    
        if (center.y < bmin.y) {
            dmin += Math.pow(center.y - bmin.y, 2);
        } else if (center.y > bmax.y) {
            dmin += Math.pow(center.y - bmax.y, 2);
        }
    
        if (center.z < bmin.z) {
            dmin += Math.pow(center.z - bmin.z, 2);
        } else if (center.z > bmax.z) {
            dmin += Math.pow(center.z - bmax.z, 2);
        }
    
        return dmin <= Math.pow(sphere.radius, 2);
    }
    

    It's modeled after

    A Simple Method for Box-Sphere Intersection Testing by Jim Arvo from "Graphics Gems", Academic Press, 1990

    The sample C code for which can be found here: http://www.realtimerendering.com/resources/GraphicsGems/gems/BoxSphere.c