I get nonsensical distance numbers and unexpected picking results when picking with onlyBoundingInfo=true
. It appears to be because the world matrix is not accounted-for when reporting the distance from this picking method.
Hi @FrameVRWill, could you please share a repro? Let’s ping @Evgeni_Popov to get his feedback.
This should probably be boundingInfo.boundingSphere.centerWorld
instead of center
:
Babylon.js Playground (babylonjs.com)
Can you try calculating yourself and see if the distance using the centerWorld is the right one?
I tried just substituting centerWorld before reporting, but the numbers were still way off (getting like 10,000 for distance where picking the same object with onlyBoundingInfo=false
would give me a distance of 3.
I believe that ray
is not in world space here based on the conversions done later in the pickedPoint
logic
how do you create the ray? can you share a reproduction? the simplest one possible one possible so I can understand what doesn’t work exactly
I don’t create the ray, this it is the one provided by the scene picking loop. Please see linked code Babylon.js/abstractMesh.ts at 68bf4bf9985fb56d7ed27d6630d600c0355b1932 · BabylonJS/Babylon.js · GitHub
I will try to make time to create an example for you
The scene.pick doesn’t allow you to set onlyBoundingInfo
(AFAIK?), so i assumed you are using intersects directly. Are you referring to the scene.pick
function? or a different picking function?
I’m overriding mesh.intersects to force onlyBoundingInfo=true
for certain, high poly meshes (just passing through all other args to intersects).
I found the fix. This gives the correct distance:
Vector3.TransformCoordinatesToRef(ray.origin, world, tempVector);
distance = Vector3.Distance(tempVector, mesh.getBoundingInfo().boundingSphere.centerWorld);
(ray & world are the arguments given to mesh.intersects
)
So the ray is delivered by you?
No man, it’s the one provided by the scene picking loop
I believe a reproduction will be best in this case to fully understand the scenario.
We are internally using onlyBoundingInfo=true
in _internalPick
( Babylon.js/ray.ts at master · BabylonJS/Babylon.js (github.com)) so it is working for this usecase as expected. Though it does feel odd that we are using center
and not centerWorld
.
@FrameVRWill - is scene.pick working as expected after this change? If it does, a PR would be wonderful!