Sign in to follow this  
gorgar

Bounding Sphere Radius and Point Intersection

Recommended Posts

Just got a quick question demonstrated in the following example: http://www.babylonjs-playground.com/#IK3V1A#6

Q1. You can see a sphere mesh being constructed with a diameter of 4, yet the bounding sphere of said mesh has a radius of '3.4641016151377544'.  Shouldn't it be ~2?

Q2. I may be misunderstanding BoundingSphere.intersectsPoint, but after picking a mesh from the scene, an additional check is done to see if said point exists within the bounding sphere.  This returns true even when dragging across the plane,  far away from the sphere.  Why is this happening?

Snippet of BoundingSphere.intersectsPoint

// pick from scene, ignore ray helper, don't use fast pick
const pick = scene.pick(scene.pointerX, scene.pointerY, m => m.name !== 'ray', false)

// if we have a hit and the point exists within bounding sphere
if (pick.hit && bs.intersectsPoint(pick.pickedPoint)) {
    ...
}

 

Thank you!

Share this post


Link to post
Share on other sites

http://www.babylonjs-playground.com/#IK3V1A#9

what is happening is we are relying on a distance calculation that for some reason is not doing it

here is a work around.

 

var min = Number.POSITIVE_INFINITY;
    var max = Number.NEGATIVE_INFINITY;
    var va = ['x','y','z'];
    
    for(var i=0; i<3; i++){
        if(bs.minimum[va[i]]<min){
            min=bs.minimum[va[i]];
        }
         if(bs.maximum[va[i]]>max){
            max=bs.maximum[va[i]];
        }
    } 

    var distance = max-min;
    var radius = distance*0.5;

    console.log(radius, "real Radius");

 

Share this post


Link to post
Share on other sites

Thanks for the quick response and details Pryme8!

Doesn't this mean that each operation performance against the Bounding Sphere is potentially incorrect? EG intersectsPoint, isInFrustum.  Assuming they depend on the internal radius, not 'realRadius'.

Share this post


Link to post
Share on other sites

ehhhhh, maybe honestly...  I mean it kinda would seem that way.

The distance.length() calc seems to be the problem.
but Im not sure if everything else is working correctly, thats why I left the old stuff and just did a secondary calc.

When I get back from lunch Ill dig more into this math.

Share this post


Link to post
Share on other sites

Q1 : I guess there's a misunderstanding about what is the bounding sphere of a mesh here, of any mesh (a sphere or a box, or anything). The bounding sphere is simply the sphere embedding the mesh bounding box !

In the particular case where the mesh itself is a sphere, well, it is contained in a bounding box greater than it, this bounding box being contained in its bounding sphere greater than the bounding box.

That's why the bounding sphere radius is always greater than the contained spherical mesh radius. 

If you want a better explanation, please have a read at the part  starting by "As you may know, a mesh -so a solid particle- is inside its bounding ..." here : http://doc.babylonjs.com/how_to/solid_particle_system#particle-intersections

In the case of spherical mesh the ratio between the bounding sphere radius and the contained sphere radius is sqrt(3)

Share this post


Link to post
Share on other sites

soooo:
 

var r = BABYLON.Vector3.Distance(bs.maximum, bs.minimum);
r /= Math.sqrt(3);
r*=0.5;
console.log(r, "real Radius");

I had to divide it in half as well, cause ratio of sqrt 3 just gave me the diameter.

Share this post


Link to post
Share on other sites
const min = new BABYLON.Vector3(-0.5, -0.5, -0.5)
const max = new BABYLON.Vector3(0.5, 0.5, 0.5)
const pnt = new BABYLON.Vector3(50, 50, 50)
const boundingSphere = new BABYLON.BoundingSphere(min, max)
        
// result is true
const result = boundingSphere.intersectsPoint(pnt)

The bounding sphere check above always returns true, although the point doesn't exist within the boundingSphere.

http://www.babylonjs-playground.com/#IK3V1A#16

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.