Question About Specific Narrowphase Collision Algorithm
Closed this issue · 2 comments
Hi, I have a few questions about the collision-checking algorithm between boxes and spheres, since I noticed that there's one specific algorithm implemented in src/narrowphase/details.h
:
- Is the algorithm in
src/narrowphase/details.h
faster than a general GJK algorithm applied on boxes and spheres? - When I setup a box collision object and a sphere collision object and use
hpp::fcl::collide
orhpp::fcl::distance
, will it call the specific algorithm insrc/narrowphase/details.h
, or still call the general GJK algorithm?
I would appreciate it very much if anyone could help me with this.
Hi @Cfather,
For box-sphere, both hpp::fcl::collide
and hpp::fcl::distance
will call the specialized function in src/narrowphase/details.h
.
This specialized function is faster than running GJK+EPA on box-sphere, notably due to the fact that a sphere is strictly convex. This means that in this case GJK and EPA will do more iterations compared to a polytope-polytope collision pair, because these algos will try to "fit" the sphere with polytopes, which is costly.
At the moment, box-sphere takes about 40 nano-seconds with the current specialized function. If you instead use a box-ellipsoid (with radii = (r, r, r)
, r
being the sphere radius) collision pair, which will use GJK+EPA behind the scene, you will be in the range of 0.5 to 1 micro-second (depending on whether or not the shapes are in collision).
Thanks for the comments. This is very clear.