38 #ifndef FCL_CONSERVATIVE_ADVANCEMENT_INL_H 39 #define FCL_CONSERVATIVE_ADVANCEMENT_INL_H 83 using S =
typename BV::S;
91 if(
collide(&o1, tf1, &o2, tf2, request, result))
104 node.motion1 = motion1;
105 node.motion2 = motion2;
115 distanceRecurse<S>(&node, 0, 0,
nullptr);
117 if(node.delta_t <= node.t_err)
123 node.toc += node.delta_t;
130 node.motion1->integrate(node.toc);
131 node.motion2->integrate(node.toc);
149 template<
typename BV,
typename ConservativeAdvancementOrientedNode>
158 using S =
typename BV::S;
166 if(
collide(&o1, tf1, &o2, tf2, request, result))
173 ConservativeAdvancementOrientedNode node;
177 node.motion1 = motion1;
178 node.motion2 = motion2;
183 node.motion2->getCurrentTransform(tf2);
187 node.R = tf.linear();
188 node.T = tf.translation();
195 if(node.delta_t <= node.t_err)
201 node.toc += node.delta_t;
208 node.motion1->integrate(node.toc);
209 node.motion2->integrate(node.toc);
221 template<
typename Shape1,
typename Shape2,
typename NarrowPhaseSolver>
226 const NarrowPhaseSolver* solver,
229 typename Shape1::S& toc)
231 using S =
typename Shape1::S;
239 if(
collide(&o1, tf1, &o2, tf2, request, result))
290 template<
typename BV,
typename Shape,
typename NarrowPhaseSolver>
295 const NarrowPhaseSolver* nsolver,
300 using S =
typename BV::S;
307 if(
collide(&o1, tf1, &o2, tf2, request, result))
317 node.motion1 = motion1;
318 node.motion2 = motion2;
323 initialize(node, *o1_tmp, tf1, o2, tf2, nsolver);
328 distanceRecurse<S>(&node, 0, 0,
nullptr);
330 if(node.delta_t <= node.t_err)
335 node.toc += node.delta_t;
342 node.motion1->integrate(node.toc);
343 node.motion2->integrate(node.toc);
360 template<
typename BV,
typename Shape,
typename NarrowPhaseSolver,
typename ConservativeAdvancementOrientedNode>
365 const NarrowPhaseSolver* nsolver,
370 using S =
typename BV::S;
377 if(
collide(&o1, tf1, &o2, tf2, request, result))
383 ConservativeAdvancementOrientedNode node;
387 node.motion1 = motion1;
388 node.motion2 = motion2;
393 node.motion2->getCurrentTransform(tf2);
403 if(node.delta_t <= node.t_err)
408 node.toc += node.delta_t;
415 node.motion1->integrate(node.toc);
416 node.motion2->integrate(node.toc);
428 template<
typename Shape,
typename NarrowPhaseSolver>
433 const NarrowPhaseSolver* nsolver,
436 typename Shape::S& toc)
438 using S =
typename Shape::S;
440 return detail::conservativeAdvancementMeshShapeOriented<RSS<S>, Shape, NarrowPhaseSolver,
MeshShapeConservativeAdvancementTraversalNodeRSS<Shape, NarrowPhaseSolver> >(o1, motion1, o2, motion2, nsolver, request, result, toc);
443 template<
typename Shape,
typename NarrowPhaseSolver>
448 const NarrowPhaseSolver* nsolver,
451 typename Shape::S& toc)
453 using S =
typename Shape::S;
455 return detail::conservativeAdvancementMeshShapeOriented<OBBRSS<S>, Shape, NarrowPhaseSolver,
MeshShapeConservativeAdvancementTraversalNodeOBBRSS<Shape, NarrowPhaseSolver> >(o1, motion1, o2, motion2, nsolver, request, result, toc);
458 template<
typename Shape,
typename BV,
typename NarrowPhaseSolver>
463 const NarrowPhaseSolver* nsolver,
468 using S =
typename BV::S;
475 if(
collide(&o1, tf1, &o2, tf2, request, result))
485 node.motion1 = motion1;
486 node.motion2 = motion2;
491 initialize(node, o1, tf1, *o2_tmp, tf2, nsolver);
498 if(node.delta_t <= node.t_err)
503 node.toc += node.delta_t;
510 node.motion1->integrate(node.toc);
511 node.motion2->integrate(node.toc);
528 template<
typename Shape,
typename BV,
typename NarrowPhaseSolver,
typename ConservativeAdvancementOrientedNode>
533 const NarrowPhaseSolver* nsolver,
538 using S =
typename BV::S;
544 if(
collide(&o1, tf1, &o2, tf2, request, result))
550 ConservativeAdvancementOrientedNode node;
554 node.motion1 = motion1;
555 node.motion2 = motion2;
560 node.motion2->getCurrentTransform(tf2);
570 if(node.delta_t <= node.t_err)
575 node.toc += node.delta_t;
582 node.motion1->integrate(node.toc);
583 node.motion2->integrate(node.toc);
596 template <
typename S,
typename Shape,
typename NarrowPhaseSolver>
604 const NarrowPhaseSolver* nsolver,
609 return detail::conservativeAdvancementShapeMeshOriented<Shape, RSS<S>, NarrowPhaseSolver,
ShapeMeshConservativeAdvancementTraversalNodeRSS<Shape, NarrowPhaseSolver> >(o1, motion1, o2, motion2, nsolver, request, result, toc);
617 const NarrowPhaseSolver* nsolver,
622 return detail::conservativeAdvancementShapeMeshOriented<Shape, OBBRSS<S>, NarrowPhaseSolver,
ShapeMeshConservativeAdvancementTraversalNodeOBBRSS<Shape, NarrowPhaseSolver> >(o1, motion1, o2, motion2, nsolver, request, result, toc);
626 template<
typename Shape,
typename NarrowPhaseSolver>
631 const NarrowPhaseSolver* nsolver,
634 typename Shape::S& toc)
637 typename Shape::S, Shape, NarrowPhaseSolver>
::run(
638 o1, motion1, o2, motion2, nsolver, request, result, toc);
641 template<
typename Shape,
typename NarrowPhaseSolver>
646 const NarrowPhaseSolver* nsolver,
649 typename Shape::S& toc)
652 typename Shape::S, Shape, NarrowPhaseSolver>
::run(
653 o1, motion1, o2, motion2, nsolver, request, result, toc);
657 template <
typename S,
typename NarrowPhaseSolver>
665 const NarrowPhaseSolver* ,
675 template <
typename S,
typename NarrowPhaseSolver>
683 const NarrowPhaseSolver* ,
692 template<
typename BV,
typename NarrowPhaseSolver>
698 using S =
typename BV::S;
714 template<
typename Shape1,
typename Shape2,
typename NarrowPhaseSolver>
719 using S =
typename Shape1::S;
721 const Shape1*
obj1 =
static_cast<const Shape1*
>(o1);
722 const Shape2*
obj2 =
static_cast<const Shape2*
>(o2);
735 template<
typename Shape,
typename BV,
typename NarrowPhaseSolver>
740 using S =
typename BV::S;
742 const Shape*
obj1 =
static_cast<const Shape*
>(o1);
749 bool is_collide = conservativeAdvancement<Shape, BV, NarrowPhaseSolver>(*
obj1, motion1, *
obj2, motion2, nsolver, c_request, c_result, toc);
757 template<
typename BV,
typename Shape,
typename NarrowPhaseSolver>
762 using S =
typename BV::S;
765 const Shape*
obj2 =
static_cast<const Shape*
>(o2);
771 bool is_collide = conservativeAdvancement<BV, Shape, NarrowPhaseSolver>(*
obj1, motion1, *
obj2, motion2, nsolver, c_request, c_result, toc);
779 template<
typename NarrowPhaseSolver>
782 using S =
typename NarrowPhaseSolver::S;
787 conservative_advancement_matrix[i][j] =
nullptr;
791 conservative_advancement_matrix[
GEOM_BOX][
GEOM_BOX] = &ShapeConservativeAdvancement<Box<S>,
Box<S>, NarrowPhaseSolver>;
794 conservative_advancement_matrix[
GEOM_BOX][
GEOM_CONE] = &ShapeConservativeAdvancement<Box<S>,
Cone<S>, NarrowPhaseSolver>;
800 conservative_advancement_matrix[
GEOM_SPHERE][
GEOM_BOX] = &ShapeConservativeAdvancement<Sphere<S>, Box<S>, NarrowPhaseSolver>;
801 conservative_advancement_matrix[
GEOM_SPHERE][
GEOM_SPHERE] = &ShapeConservativeAdvancement<Sphere<S>, Sphere<S>, NarrowPhaseSolver>;
802 conservative_advancement_matrix[
GEOM_SPHERE][
GEOM_CAPSULE] = &ShapeConservativeAdvancement<Sphere<S>, Capsule<S>, NarrowPhaseSolver>;
803 conservative_advancement_matrix[
GEOM_SPHERE][
GEOM_CONE] = &ShapeConservativeAdvancement<Sphere<S>, Cone<S>, NarrowPhaseSolver>;
804 conservative_advancement_matrix[
GEOM_SPHERE][
GEOM_CYLINDER] = &ShapeConservativeAdvancement<Sphere<S>, Cylinder<S>, NarrowPhaseSolver>;
805 conservative_advancement_matrix[
GEOM_SPHERE][
GEOM_CONVEX] = &ShapeConservativeAdvancement<Sphere<S>, Convex<S>, NarrowPhaseSolver>;
806 conservative_advancement_matrix[
GEOM_SPHERE][
GEOM_PLANE] = &ShapeConservativeAdvancement<Sphere<S>, Plane<S>, NarrowPhaseSolver>;
807 conservative_advancement_matrix[
GEOM_SPHERE][
GEOM_HALFSPACE] = &ShapeConservativeAdvancement<Sphere<S>, Halfspace<S>, NarrowPhaseSolver>;
809 conservative_advancement_matrix[
GEOM_CAPSULE][
GEOM_BOX] = &ShapeConservativeAdvancement<Capsule<S>, Box<S>, NarrowPhaseSolver>;
810 conservative_advancement_matrix[
GEOM_CAPSULE][
GEOM_SPHERE] = &ShapeConservativeAdvancement<Capsule<S>, Sphere<S>, NarrowPhaseSolver>;
811 conservative_advancement_matrix[
GEOM_CAPSULE][
GEOM_CAPSULE] = &ShapeConservativeAdvancement<Capsule<S>, Capsule<S>, NarrowPhaseSolver>;
812 conservative_advancement_matrix[
GEOM_CAPSULE][
GEOM_CONE] = &ShapeConservativeAdvancement<Capsule<S>, Cone<S>, NarrowPhaseSolver>;
813 conservative_advancement_matrix[
GEOM_CAPSULE][
GEOM_CYLINDER] = &ShapeConservativeAdvancement<Capsule<S>, Cylinder<S>, NarrowPhaseSolver>;
814 conservative_advancement_matrix[
GEOM_CAPSULE][
GEOM_CONVEX] = &ShapeConservativeAdvancement<Capsule<S>, Convex<S>, NarrowPhaseSolver>;
815 conservative_advancement_matrix[
GEOM_CAPSULE][
GEOM_PLANE] = &ShapeConservativeAdvancement<Capsule<S>, Plane<S>, NarrowPhaseSolver>;
816 conservative_advancement_matrix[
GEOM_CAPSULE][
GEOM_HALFSPACE] = &ShapeConservativeAdvancement<Capsule<S>, Halfspace<S>, NarrowPhaseSolver>;
818 conservative_advancement_matrix[
GEOM_CONE][
GEOM_BOX] = &ShapeConservativeAdvancement<Cone<S>, Box<S>, NarrowPhaseSolver>;
819 conservative_advancement_matrix[
GEOM_CONE][
GEOM_SPHERE] = &ShapeConservativeAdvancement<Cone<S>, Sphere<S>, NarrowPhaseSolver>;
820 conservative_advancement_matrix[
GEOM_CONE][
GEOM_CAPSULE] = &ShapeConservativeAdvancement<Cone<S>, Capsule<S>, NarrowPhaseSolver>;
821 conservative_advancement_matrix[
GEOM_CONE][
GEOM_CONE] = &ShapeConservativeAdvancement<Cone<S>, Cone<S>, NarrowPhaseSolver>;
822 conservative_advancement_matrix[
GEOM_CONE][
GEOM_CYLINDER] = &ShapeConservativeAdvancement<Cone<S>, Cylinder<S>, NarrowPhaseSolver>;
823 conservative_advancement_matrix[
GEOM_CONE][
GEOM_CONVEX] = &ShapeConservativeAdvancement<Cone<S>, Convex<S>, NarrowPhaseSolver>;
824 conservative_advancement_matrix[
GEOM_CONE][
GEOM_PLANE] = &ShapeConservativeAdvancement<Cone<S>, Plane<S>, NarrowPhaseSolver>;
825 conservative_advancement_matrix[
GEOM_CONE][
GEOM_HALFSPACE] = &ShapeConservativeAdvancement<Cone<S>, Halfspace<S>, NarrowPhaseSolver>;
827 conservative_advancement_matrix[
GEOM_CYLINDER][
GEOM_BOX] = &ShapeConservativeAdvancement<Cylinder<S>, Box<S>, NarrowPhaseSolver>;
828 conservative_advancement_matrix[
GEOM_CYLINDER][
GEOM_SPHERE] = &ShapeConservativeAdvancement<Cylinder<S>, Sphere<S>, NarrowPhaseSolver>;
829 conservative_advancement_matrix[
GEOM_CYLINDER][
GEOM_CAPSULE] = &ShapeConservativeAdvancement<Cylinder<S>, Capsule<S>, NarrowPhaseSolver>;
830 conservative_advancement_matrix[
GEOM_CYLINDER][
GEOM_CONE] = &ShapeConservativeAdvancement<Cylinder<S>, Cone<S>, NarrowPhaseSolver>;
831 conservative_advancement_matrix[
GEOM_CYLINDER][
GEOM_CYLINDER] = &ShapeConservativeAdvancement<Cylinder<S>, Cylinder<S>, NarrowPhaseSolver>;
832 conservative_advancement_matrix[
GEOM_CYLINDER][
GEOM_CONVEX] = &ShapeConservativeAdvancement<Cylinder<S>, Convex<S>, NarrowPhaseSolver>;
833 conservative_advancement_matrix[
GEOM_CYLINDER][
GEOM_PLANE] = &ShapeConservativeAdvancement<Cylinder<S>, Plane<S>, NarrowPhaseSolver>;
834 conservative_advancement_matrix[
GEOM_CYLINDER][
GEOM_HALFSPACE] = &ShapeConservativeAdvancement<Cylinder<S>, Halfspace<S>, NarrowPhaseSolver>;
836 conservative_advancement_matrix[
GEOM_CONVEX][
GEOM_BOX] = &ShapeConservativeAdvancement<Convex<S>, Box<S>, NarrowPhaseSolver>;
837 conservative_advancement_matrix[
GEOM_CONVEX][
GEOM_SPHERE] = &ShapeConservativeAdvancement<Convex<S>, Sphere<S>, NarrowPhaseSolver>;
838 conservative_advancement_matrix[
GEOM_CONVEX][
GEOM_CAPSULE] = &ShapeConservativeAdvancement<Convex<S>, Capsule<S>, NarrowPhaseSolver>;
839 conservative_advancement_matrix[
GEOM_CONVEX][
GEOM_CONE] = &ShapeConservativeAdvancement<Convex<S>, Cone<S>, NarrowPhaseSolver>;
840 conservative_advancement_matrix[
GEOM_CONVEX][
GEOM_CYLINDER] = &ShapeConservativeAdvancement<Convex<S>, Cylinder<S>, NarrowPhaseSolver>;
841 conservative_advancement_matrix[
GEOM_CONVEX][
GEOM_CONVEX] = &ShapeConservativeAdvancement<Convex<S>, Convex<S>, NarrowPhaseSolver>;
842 conservative_advancement_matrix[
GEOM_CONVEX][
GEOM_PLANE] = &ShapeConservativeAdvancement<Convex<S>, Plane<S>, NarrowPhaseSolver>;
843 conservative_advancement_matrix[
GEOM_CONVEX][
GEOM_HALFSPACE] = &ShapeConservativeAdvancement<Convex<S>, Halfspace<S>, NarrowPhaseSolver>;
845 conservative_advancement_matrix[
GEOM_PLANE][
GEOM_BOX] = &ShapeConservativeAdvancement<Plane<S>, Box<S>, NarrowPhaseSolver>;
846 conservative_advancement_matrix[
GEOM_PLANE][
GEOM_SPHERE] = &ShapeConservativeAdvancement<Plane<S>, Sphere<S>, NarrowPhaseSolver>;
847 conservative_advancement_matrix[
GEOM_PLANE][
GEOM_CAPSULE] = &ShapeConservativeAdvancement<Plane<S>, Capsule<S>, NarrowPhaseSolver>;
848 conservative_advancement_matrix[
GEOM_PLANE][
GEOM_CONE] = &ShapeConservativeAdvancement<Plane<S>, Cone<S>, NarrowPhaseSolver>;
849 conservative_advancement_matrix[
GEOM_PLANE][
GEOM_CYLINDER] = &ShapeConservativeAdvancement<Plane<S>, Cylinder<S>, NarrowPhaseSolver>;
850 conservative_advancement_matrix[
GEOM_PLANE][
GEOM_CONVEX] = &ShapeConservativeAdvancement<Plane<S>, Convex<S>, NarrowPhaseSolver>;
851 conservative_advancement_matrix[
GEOM_PLANE][
GEOM_PLANE] = &ShapeConservativeAdvancement<Plane<S>, Plane<S>, NarrowPhaseSolver>;
852 conservative_advancement_matrix[
GEOM_PLANE][
GEOM_HALFSPACE] = &ShapeConservativeAdvancement<Plane<S>, Halfspace<S>, NarrowPhaseSolver>;
854 conservative_advancement_matrix[
GEOM_HALFSPACE][
GEOM_BOX] = &ShapeConservativeAdvancement<Halfspace<S>, Box<S>, NarrowPhaseSolver>;
855 conservative_advancement_matrix[
GEOM_HALFSPACE][
GEOM_SPHERE] = &ShapeConservativeAdvancement<Halfspace<S>, Sphere<S>, NarrowPhaseSolver>;
856 conservative_advancement_matrix[
GEOM_HALFSPACE][
GEOM_CAPSULE] = &ShapeConservativeAdvancement<Halfspace<S>, Capsule<S>, NarrowPhaseSolver>;
857 conservative_advancement_matrix[
GEOM_HALFSPACE][
GEOM_CONE] = &ShapeConservativeAdvancement<Halfspace<S>, Cone<S>, NarrowPhaseSolver>;
858 conservative_advancement_matrix[
GEOM_HALFSPACE][
GEOM_CYLINDER] = &ShapeConservativeAdvancement<Halfspace<S>, Cylinder<S>, NarrowPhaseSolver>;
859 conservative_advancement_matrix[
GEOM_HALFSPACE][
GEOM_CONVEX] = &ShapeConservativeAdvancement<Halfspace<S>, Convex<S>, NarrowPhaseSolver>;
860 conservative_advancement_matrix[
GEOM_HALFSPACE][
GEOM_PLANE] = &ShapeConservativeAdvancement<Halfspace<S>, Plane<S>, NarrowPhaseSolver>;
861 conservative_advancement_matrix[
GEOM_HALFSPACE][
GEOM_HALFSPACE] = &ShapeConservativeAdvancement<Halfspace<S>, Halfspace<S>, NarrowPhaseSolver>;
863 conservative_advancement_matrix[
BV_AABB][
GEOM_BOX] = &BVHShapeConservativeAdvancement<AABB<S>, Box<S>, NarrowPhaseSolver>;
864 conservative_advancement_matrix[
BV_AABB][
GEOM_SPHERE] = &BVHShapeConservativeAdvancement<AABB<S>, Sphere<S>, NarrowPhaseSolver>;
865 conservative_advancement_matrix[
BV_AABB][
GEOM_CAPSULE] = &BVHShapeConservativeAdvancement<AABB<S>, Capsule<S>, NarrowPhaseSolver>;
866 conservative_advancement_matrix[
BV_AABB][
GEOM_CONE] = &BVHShapeConservativeAdvancement<AABB<S>, Cone<S>, NarrowPhaseSolver>;
867 conservative_advancement_matrix[
BV_AABB][
GEOM_CYLINDER] = &BVHShapeConservativeAdvancement<AABB<S>, Cylinder<S>, NarrowPhaseSolver>;
868 conservative_advancement_matrix[
BV_AABB][
GEOM_CONVEX] = &BVHShapeConservativeAdvancement<AABB<S>, Convex<S>, NarrowPhaseSolver>;
869 conservative_advancement_matrix[
BV_AABB][
GEOM_PLANE] = &BVHShapeConservativeAdvancement<AABB<S>, Plane<S>, NarrowPhaseSolver>;
870 conservative_advancement_matrix[
BV_AABB][
GEOM_HALFSPACE] = &BVHShapeConservativeAdvancement<AABB<S>, Halfspace<S>, NarrowPhaseSolver>;
872 conservative_advancement_matrix[
BV_OBB][
GEOM_BOX] = &BVHShapeConservativeAdvancement<OBB<S>, Box<S>, NarrowPhaseSolver>;
873 conservative_advancement_matrix[
BV_OBB][
GEOM_SPHERE] = &BVHShapeConservativeAdvancement<OBB<S>, Sphere<S>, NarrowPhaseSolver>;
874 conservative_advancement_matrix[
BV_OBB][
GEOM_CAPSULE] = &BVHShapeConservativeAdvancement<OBB<S>, Capsule<S>, NarrowPhaseSolver>;
875 conservative_advancement_matrix[
BV_OBB][
GEOM_CONE] = &BVHShapeConservativeAdvancement<OBB<S>, Cone<S>, NarrowPhaseSolver>;
876 conservative_advancement_matrix[
BV_OBB][
GEOM_CYLINDER] = &BVHShapeConservativeAdvancement<OBB<S>, Cylinder<S>, NarrowPhaseSolver>;
877 conservative_advancement_matrix[
BV_OBB][
GEOM_CONVEX] = &BVHShapeConservativeAdvancement<OBB<S>, Convex<S>, NarrowPhaseSolver>;
878 conservative_advancement_matrix[
BV_OBB][
GEOM_PLANE] = &BVHShapeConservativeAdvancement<OBB<S>, Plane<S>, NarrowPhaseSolver>;
879 conservative_advancement_matrix[
BV_OBB][
GEOM_HALFSPACE] = &BVHShapeConservativeAdvancement<OBB<S>, Halfspace<S>, NarrowPhaseSolver>;
881 conservative_advancement_matrix[
BV_OBBRSS][
GEOM_BOX] = &BVHShapeConservativeAdvancement<OBBRSS<S>, Box<S>, NarrowPhaseSolver>;
882 conservative_advancement_matrix[
BV_OBBRSS][
GEOM_SPHERE] = &BVHShapeConservativeAdvancement<OBBRSS<S>, Sphere<S>, NarrowPhaseSolver>;
883 conservative_advancement_matrix[
BV_OBBRSS][
GEOM_CAPSULE] = &BVHShapeConservativeAdvancement<OBBRSS<S>, Capsule<S>, NarrowPhaseSolver>;
884 conservative_advancement_matrix[
BV_OBBRSS][
GEOM_CONE] = &BVHShapeConservativeAdvancement<OBBRSS<S>, Cone<S>, NarrowPhaseSolver>;
885 conservative_advancement_matrix[
BV_OBBRSS][
GEOM_CYLINDER] = &BVHShapeConservativeAdvancement<OBBRSS<S>, Cylinder<S>, NarrowPhaseSolver>;
886 conservative_advancement_matrix[
BV_OBBRSS][
GEOM_CONVEX] = &BVHShapeConservativeAdvancement<OBBRSS<S>, Convex<S>, NarrowPhaseSolver>;
887 conservative_advancement_matrix[
BV_OBBRSS][
GEOM_PLANE] = &BVHShapeConservativeAdvancement<OBBRSS<S>, Plane<S>, NarrowPhaseSolver>;
888 conservative_advancement_matrix[
BV_OBBRSS][
GEOM_HALFSPACE] = &BVHShapeConservativeAdvancement<OBBRSS<S>, Halfspace<S>, NarrowPhaseSolver>;
890 conservative_advancement_matrix[
BV_RSS][
GEOM_BOX] = &BVHShapeConservativeAdvancement<RSS<S>, Box<S>, NarrowPhaseSolver>;
891 conservative_advancement_matrix[
BV_RSS][
GEOM_SPHERE] = &BVHShapeConservativeAdvancement<RSS<S>, Sphere<S>, NarrowPhaseSolver>;
892 conservative_advancement_matrix[
BV_RSS][
GEOM_CAPSULE] = &BVHShapeConservativeAdvancement<RSS<S>, Capsule<S>, NarrowPhaseSolver>;
893 conservative_advancement_matrix[
BV_RSS][
GEOM_CONE] = &BVHShapeConservativeAdvancement<RSS<S>, Cone<S>, NarrowPhaseSolver>;
894 conservative_advancement_matrix[
BV_RSS][
GEOM_CYLINDER] = &BVHShapeConservativeAdvancement<RSS<S>, Cylinder<S>, NarrowPhaseSolver>;
895 conservative_advancement_matrix[
BV_RSS][
GEOM_CONVEX] = &BVHShapeConservativeAdvancement<RSS<S>, Convex<S>, NarrowPhaseSolver>;
896 conservative_advancement_matrix[
BV_RSS][
GEOM_PLANE] = &BVHShapeConservativeAdvancement<RSS<S>, Plane<S>, NarrowPhaseSolver>;
897 conservative_advancement_matrix[
BV_RSS][
GEOM_HALFSPACE] = &BVHShapeConservativeAdvancement<RSS<S>, Halfspace<S>, NarrowPhaseSolver>;
899 conservative_advancement_matrix[
BV_KDOP16][
GEOM_BOX] = &BVHShapeConservativeAdvancement<KDOP<S, 16>, Box<S>, NarrowPhaseSolver>;
900 conservative_advancement_matrix[
BV_KDOP16][
GEOM_SPHERE] = &BVHShapeConservativeAdvancement<KDOP<S, 16>, Sphere<S>, NarrowPhaseSolver>;
901 conservative_advancement_matrix[
BV_KDOP16][
GEOM_CAPSULE] = &BVHShapeConservativeAdvancement<KDOP<S, 16>, Capsule<S>, NarrowPhaseSolver>;
902 conservative_advancement_matrix[
BV_KDOP16][
GEOM_CONE] = &BVHShapeConservativeAdvancement<KDOP<S, 16>, Cone<S>, NarrowPhaseSolver>;
903 conservative_advancement_matrix[
BV_KDOP16][
GEOM_CYLINDER] = &BVHShapeConservativeAdvancement<KDOP<S, 16>, Cylinder<S>, NarrowPhaseSolver>;
904 conservative_advancement_matrix[
BV_KDOP16][
GEOM_CONVEX] = &BVHShapeConservativeAdvancement<KDOP<S, 16>, Convex<S>, NarrowPhaseSolver>;
905 conservative_advancement_matrix[
BV_KDOP16][
GEOM_PLANE] = &BVHShapeConservativeAdvancement<KDOP<S, 16>, Plane<S>, NarrowPhaseSolver>;
906 conservative_advancement_matrix[
BV_KDOP16][
GEOM_HALFSPACE] = &BVHShapeConservativeAdvancement<KDOP<S, 16>, Halfspace<S>, NarrowPhaseSolver>;
908 conservative_advancement_matrix[
BV_KDOP18][
GEOM_BOX] = &BVHShapeConservativeAdvancement<KDOP<S, 18>, Box<S>, NarrowPhaseSolver>;
909 conservative_advancement_matrix[
BV_KDOP18][
GEOM_SPHERE] = &BVHShapeConservativeAdvancement<KDOP<S, 18>, Sphere<S>, NarrowPhaseSolver>;
910 conservative_advancement_matrix[
BV_KDOP18][
GEOM_CAPSULE] = &BVHShapeConservativeAdvancement<KDOP<S, 18>, Capsule<S>, NarrowPhaseSolver>;
911 conservative_advancement_matrix[
BV_KDOP18][
GEOM_CONE] = &BVHShapeConservativeAdvancement<KDOP<S, 18>, Cone<S>, NarrowPhaseSolver>;
912 conservative_advancement_matrix[
BV_KDOP18][
GEOM_CYLINDER] = &BVHShapeConservativeAdvancement<KDOP<S, 18>, Cylinder<S>, NarrowPhaseSolver>;
913 conservative_advancement_matrix[
BV_KDOP18][
GEOM_CONVEX] = &BVHShapeConservativeAdvancement<KDOP<S, 18>, Convex<S>, NarrowPhaseSolver>;
914 conservative_advancement_matrix[
BV_KDOP18][
GEOM_PLANE] = &BVHShapeConservativeAdvancement<KDOP<S, 18>, Plane<S>, NarrowPhaseSolver>;
915 conservative_advancement_matrix[
BV_KDOP18][
GEOM_HALFSPACE] = &BVHShapeConservativeAdvancement<KDOP<S, 18>, Halfspace<S>, NarrowPhaseSolver>;
917 conservative_advancement_matrix[
BV_KDOP24][
GEOM_BOX] = &BVHShapeConservativeAdvancement<KDOP<S, 24>, Box<S>, NarrowPhaseSolver>;
918 conservative_advancement_matrix[
BV_KDOP24][
GEOM_SPHERE] = &BVHShapeConservativeAdvancement<KDOP<S, 24>, Sphere<S>, NarrowPhaseSolver>;
919 conservative_advancement_matrix[
BV_KDOP24][
GEOM_CAPSULE] = &BVHShapeConservativeAdvancement<KDOP<S, 24>, Capsule<S>, NarrowPhaseSolver>;
920 conservative_advancement_matrix[
BV_KDOP24][
GEOM_CONE] = &BVHShapeConservativeAdvancement<KDOP<S, 24>, Cone<S>, NarrowPhaseSolver>;
921 conservative_advancement_matrix[
BV_KDOP24][
GEOM_CYLINDER] = &BVHShapeConservativeAdvancement<KDOP<S, 24>, Cylinder<S>, NarrowPhaseSolver>;
922 conservative_advancement_matrix[
BV_KDOP24][
GEOM_CONVEX] = &BVHShapeConservativeAdvancement<KDOP<S, 24>, Convex<S>, NarrowPhaseSolver>;
923 conservative_advancement_matrix[
BV_KDOP24][
GEOM_PLANE] = &BVHShapeConservativeAdvancement<KDOP<S, 24>, Plane<S>, NarrowPhaseSolver>;
924 conservative_advancement_matrix[
BV_KDOP24][
GEOM_HALFSPACE] = &BVHShapeConservativeAdvancement<KDOP<S, 24>, Halfspace<S>, NarrowPhaseSolver>;
926 conservative_advancement_matrix[
BV_kIOS][
GEOM_BOX] = &BVHShapeConservativeAdvancement<kIOS<S>, Box<S>, NarrowPhaseSolver>;
927 conservative_advancement_matrix[
BV_kIOS][
GEOM_SPHERE] = &BVHShapeConservativeAdvancement<kIOS<S>, Sphere<S>, NarrowPhaseSolver>;
928 conservative_advancement_matrix[
BV_kIOS][
GEOM_CAPSULE] = &BVHShapeConservativeAdvancement<kIOS<S>, Capsule<S>, NarrowPhaseSolver>;
929 conservative_advancement_matrix[
BV_kIOS][
GEOM_CONE] = &BVHShapeConservativeAdvancement<kIOS<S>, Cone<S>, NarrowPhaseSolver>;
930 conservative_advancement_matrix[
BV_kIOS][
GEOM_CYLINDER] = &BVHShapeConservativeAdvancement<kIOS<S>, Cylinder<S>, NarrowPhaseSolver>;
931 conservative_advancement_matrix[
BV_kIOS][
GEOM_CONVEX] = &BVHShapeConservativeAdvancement<kIOS<S>, Convex<S>, NarrowPhaseSolver>;
932 conservative_advancement_matrix[
BV_kIOS][
GEOM_PLANE] = &BVHShapeConservativeAdvancement<kIOS<S>, Plane<S>, NarrowPhaseSolver>;
933 conservative_advancement_matrix[
BV_kIOS][
GEOM_HALFSPACE] = &BVHShapeConservativeAdvancement<kIOS<S>, Halfspace<S>, NarrowPhaseSolver>;
936 conservative_advancement_matrix[
GEOM_BOX][
BV_AABB] = &ShapeBVHConservativeAdvancement<Box<S>,
AABB<S>, NarrowPhaseSolver>;
937 conservative_advancement_matrix[
GEOM_SPHERE][
BV_AABB] = &ShapeBVHConservativeAdvancement<Sphere<S>, AABB<S>, NarrowPhaseSolver>;
938 conservative_advancement_matrix[
GEOM_CAPSULE][
BV_AABB] = &ShapeBVHConservativeAdvancement<Capsule<S>, AABB<S>, NarrowPhaseSolver>;
939 conservative_advancement_matrix[
GEOM_CONE][
BV_AABB] = &ShapeBVHConservativeAdvancement<Cone<S>, AABB<S>, NarrowPhaseSolver>;
940 conservative_advancement_matrix[
GEOM_CYLINDER][
BV_AABB] = &ShapeBVHConservativeAdvancement<Cylinder<S>, AABB<S>, NarrowPhaseSolver>;
941 conservative_advancement_matrix[
GEOM_CONVEX][
BV_AABB] = &ShapeBVHConservativeAdvancement<Convex<S>, AABB<S>, NarrowPhaseSolver>;
942 conservative_advancement_matrix[
GEOM_PLANE][
BV_AABB] = &ShapeBVHConservativeAdvancement<Plane<S>, AABB<S>, NarrowPhaseSolver>;
943 conservative_advancement_matrix[
GEOM_HALFSPACE][
BV_AABB] = &ShapeBVHConservativeAdvancement<Halfspace<S>, AABB<S>, NarrowPhaseSolver>;
945 conservative_advancement_matrix[
GEOM_BOX][
BV_OBB] = &ShapeBVHConservativeAdvancement<Box<S>,
OBB<S>, NarrowPhaseSolver>;
946 conservative_advancement_matrix[
GEOM_SPHERE][
BV_OBB] = &ShapeBVHConservativeAdvancement<Sphere<S>, OBB<S>, NarrowPhaseSolver>;
947 conservative_advancement_matrix[
GEOM_CAPSULE][
BV_OBB] = &ShapeBVHConservativeAdvancement<Capsule<S>, OBB<S>, NarrowPhaseSolver>;
948 conservative_advancement_matrix[
GEOM_CONE][
BV_OBB] = &ShapeBVHConservativeAdvancement<Cone<S>, OBB<S>, NarrowPhaseSolver>;
949 conservative_advancement_matrix[
GEOM_CYLINDER][
BV_OBB] = &ShapeBVHConservativeAdvancement<Cylinder<S>, OBB<S>, NarrowPhaseSolver>;
950 conservative_advancement_matrix[
GEOM_CONVEX][
BV_OBB] = &ShapeBVHConservativeAdvancement<Convex<S>, OBB<S>, NarrowPhaseSolver>;
951 conservative_advancement_matrix[
GEOM_PLANE][
BV_OBB] = &ShapeBVHConservativeAdvancement<Plane<S>, OBB<S>, NarrowPhaseSolver>;
952 conservative_advancement_matrix[
GEOM_HALFSPACE][
BV_OBB] = &ShapeBVHConservativeAdvancement<Halfspace<S>, OBB<S>, NarrowPhaseSolver>;
954 conservative_advancement_matrix[
GEOM_BOX][
BV_RSS] = &ShapeBVHConservativeAdvancement<Box<S>,
RSS<S>, NarrowPhaseSolver>;
955 conservative_advancement_matrix[
GEOM_SPHERE][
BV_RSS] = &ShapeBVHConservativeAdvancement<Sphere<S>, RSS<S>, NarrowPhaseSolver>;
956 conservative_advancement_matrix[
GEOM_CAPSULE][
BV_RSS] = &ShapeBVHConservativeAdvancement<Capsule<S>, RSS<S>, NarrowPhaseSolver>;
957 conservative_advancement_matrix[
GEOM_CONE][
BV_RSS] = &ShapeBVHConservativeAdvancement<Cone<S>, RSS<S>, NarrowPhaseSolver>;
958 conservative_advancement_matrix[
GEOM_CYLINDER][
BV_RSS] = &ShapeBVHConservativeAdvancement<Cylinder<S>, RSS<S>, NarrowPhaseSolver>;
959 conservative_advancement_matrix[
GEOM_CONVEX][
BV_RSS] = &ShapeBVHConservativeAdvancement<Convex<S>, RSS<S>, NarrowPhaseSolver>;
960 conservative_advancement_matrix[
GEOM_PLANE][
BV_RSS] = &ShapeBVHConservativeAdvancement<Plane<S>, RSS<S>, NarrowPhaseSolver>;
961 conservative_advancement_matrix[
GEOM_HALFSPACE][
BV_RSS] = &ShapeBVHConservativeAdvancement<Halfspace<S>, RSS<S>, NarrowPhaseSolver>;
963 conservative_advancement_matrix[
GEOM_BOX][
BV_OBBRSS] = &ShapeBVHConservativeAdvancement<Box<S>,
OBBRSS<S>, NarrowPhaseSolver>;
964 conservative_advancement_matrix[
GEOM_SPHERE][
BV_OBBRSS] = &ShapeBVHConservativeAdvancement<Sphere<S>, OBBRSS<S>, NarrowPhaseSolver>;
965 conservative_advancement_matrix[
GEOM_CAPSULE][
BV_OBBRSS] = &ShapeBVHConservativeAdvancement<Capsule<S>, OBBRSS<S>, NarrowPhaseSolver>;
966 conservative_advancement_matrix[
GEOM_CONE][
BV_OBBRSS] = &ShapeBVHConservativeAdvancement<Cone<S>, OBBRSS<S>, NarrowPhaseSolver>;
967 conservative_advancement_matrix[
GEOM_CYLINDER][
BV_OBBRSS] = &ShapeBVHConservativeAdvancement<Cylinder<S>, OBBRSS<S>, NarrowPhaseSolver>;
968 conservative_advancement_matrix[
GEOM_CONVEX][
BV_OBBRSS] = &ShapeBVHConservativeAdvancement<Convex<S>, OBBRSS<S>, NarrowPhaseSolver>;
969 conservative_advancement_matrix[
GEOM_PLANE][
BV_OBBRSS] = &ShapeBVHConservativeAdvancement<Plane<S>, OBBRSS<S>, NarrowPhaseSolver>;
970 conservative_advancement_matrix[
GEOM_HALFSPACE][
BV_OBBRSS] = &ShapeBVHConservativeAdvancement<Halfspace<S>, OBBRSS<S>, NarrowPhaseSolver>;
973 conservative_advancement_matrix[
GEOM_SPHERE][
BV_KDOP16] = &ShapeBVHConservativeAdvancement<Sphere<S>, KDOP<S, 16>, NarrowPhaseSolver>;
974 conservative_advancement_matrix[
GEOM_CAPSULE][
BV_KDOP16] = &ShapeBVHConservativeAdvancement<Capsule<S>, KDOP<S, 16>, NarrowPhaseSolver>;
975 conservative_advancement_matrix[
GEOM_CONE][
BV_KDOP16] = &ShapeBVHConservativeAdvancement<Cone<S>, KDOP<S, 16>, NarrowPhaseSolver>;
976 conservative_advancement_matrix[
GEOM_CYLINDER][
BV_KDOP16] = &ShapeBVHConservativeAdvancement<Cylinder<S>, KDOP<S, 16>, NarrowPhaseSolver>;
977 conservative_advancement_matrix[
GEOM_CONVEX][
BV_KDOP16] = &ShapeBVHConservativeAdvancement<Convex<S>, KDOP<S, 16>, NarrowPhaseSolver>;
978 conservative_advancement_matrix[
GEOM_PLANE][
BV_KDOP16] = &ShapeBVHConservativeAdvancement<Plane<S>, KDOP<S, 16>, NarrowPhaseSolver>;
979 conservative_advancement_matrix[
GEOM_HALFSPACE][
BV_KDOP16] = &ShapeBVHConservativeAdvancement<Halfspace<S>, KDOP<S, 16>, NarrowPhaseSolver>;
982 conservative_advancement_matrix[
GEOM_SPHERE][
BV_KDOP18] = &ShapeBVHConservativeAdvancement<Sphere<S>, KDOP<S, 18>, NarrowPhaseSolver>;
983 conservative_advancement_matrix[
GEOM_CAPSULE][
BV_KDOP18] = &ShapeBVHConservativeAdvancement<Capsule<S>, KDOP<S, 18>, NarrowPhaseSolver>;
984 conservative_advancement_matrix[
GEOM_CONE][
BV_KDOP18] = &ShapeBVHConservativeAdvancement<Cone<S>, KDOP<S, 18>, NarrowPhaseSolver>;
985 conservative_advancement_matrix[
GEOM_CYLINDER][
BV_KDOP18] = &ShapeBVHConservativeAdvancement<Cylinder<S>, KDOP<S, 18>, NarrowPhaseSolver>;
986 conservative_advancement_matrix[
GEOM_CONVEX][
BV_KDOP18] = &ShapeBVHConservativeAdvancement<Convex<S>, KDOP<S, 18>, NarrowPhaseSolver>;
987 conservative_advancement_matrix[
GEOM_PLANE][
BV_KDOP18] = &ShapeBVHConservativeAdvancement<Plane<S>, KDOP<S, 18>, NarrowPhaseSolver>;
988 conservative_advancement_matrix[
GEOM_HALFSPACE][
BV_KDOP18] = &ShapeBVHConservativeAdvancement<Halfspace<S>, KDOP<S, 18>, NarrowPhaseSolver>;
991 conservative_advancement_matrix[
GEOM_SPHERE][
BV_KDOP24] = &ShapeBVHConservativeAdvancement<Sphere<S>, KDOP<S, 24>, NarrowPhaseSolver>;
992 conservative_advancement_matrix[
GEOM_CAPSULE][
BV_KDOP24] = &ShapeBVHConservativeAdvancement<Capsule<S>, KDOP<S, 24>, NarrowPhaseSolver>;
993 conservative_advancement_matrix[
GEOM_CONE][
BV_KDOP24] = &ShapeBVHConservativeAdvancement<Cone<S>, KDOP<S, 24>, NarrowPhaseSolver>;
994 conservative_advancement_matrix[
GEOM_CYLINDER][
BV_KDOP24] = &ShapeBVHConservativeAdvancement<Cylinder<S>, KDOP<S, 24>, NarrowPhaseSolver>;
995 conservative_advancement_matrix[
GEOM_CONVEX][
BV_KDOP24] = &ShapeBVHConservativeAdvancement<Convex<S>, KDOP<S, 24>, NarrowPhaseSolver>;
996 conservative_advancement_matrix[
GEOM_PLANE][
BV_KDOP24] = &ShapeBVHConservativeAdvancement<Plane<S>, KDOP<S, 24>, NarrowPhaseSolver>;
997 conservative_advancement_matrix[
GEOM_HALFSPACE][
BV_KDOP24] = &ShapeBVHConservativeAdvancement<Halfspace<S>, KDOP<S, 24>, NarrowPhaseSolver>;
999 conservative_advancement_matrix[
GEOM_BOX][
BV_kIOS] = &ShapeBVHConservativeAdvancement<Box<S>,
kIOS<S>, NarrowPhaseSolver>;
1000 conservative_advancement_matrix[
GEOM_SPHERE][
BV_kIOS] = &ShapeBVHConservativeAdvancement<Sphere<S>, kIOS<S>, NarrowPhaseSolver>;
1001 conservative_advancement_matrix[
GEOM_CAPSULE][
BV_kIOS] = &ShapeBVHConservativeAdvancement<Capsule<S>, kIOS<S>, NarrowPhaseSolver>;
1002 conservative_advancement_matrix[
GEOM_CONE][
BV_kIOS] = &ShapeBVHConservativeAdvancement<Cone<S>, kIOS<S>, NarrowPhaseSolver>;
1003 conservative_advancement_matrix[
GEOM_CYLINDER][
BV_kIOS] = &ShapeBVHConservativeAdvancement<Cylinder<S>, kIOS<S>, NarrowPhaseSolver>;
1004 conservative_advancement_matrix[
GEOM_CONVEX][
BV_kIOS] = &ShapeBVHConservativeAdvancement<Convex<S>, kIOS<S>, NarrowPhaseSolver>;
1005 conservative_advancement_matrix[
GEOM_PLANE][
BV_kIOS] = &ShapeBVHConservativeAdvancement<Plane<S>, kIOS<S>, NarrowPhaseSolver>;
1006 conservative_advancement_matrix[
GEOM_HALFSPACE][
BV_kIOS] = &ShapeBVHConservativeAdvancement<Halfspace<S>, kIOS<S>, NarrowPhaseSolver>;
1008 conservative_advancement_matrix[
BV_AABB][
BV_AABB] = &BVHConservativeAdvancement<AABB<S>, NarrowPhaseSolver>;
1009 conservative_advancement_matrix[
BV_OBB][
BV_OBB] = &BVHConservativeAdvancement<OBB<S>, NarrowPhaseSolver>;
1010 conservative_advancement_matrix[
BV_RSS][
BV_RSS] = &BVHConservativeAdvancement<RSS<S>, NarrowPhaseSolver>;
1011 conservative_advancement_matrix[
BV_OBBRSS][
BV_OBBRSS] = &BVHConservativeAdvancement<OBBRSS<S>, NarrowPhaseSolver>;
1012 conservative_advancement_matrix[
BV_KDOP16][
BV_KDOP16] = &BVHConservativeAdvancement<KDOP<S, 16>, NarrowPhaseSolver>;
1013 conservative_advancement_matrix[
BV_KDOP18][
BV_KDOP18] = &BVHConservativeAdvancement<KDOP<S, 18>, NarrowPhaseSolver>;
1014 conservative_advancement_matrix[
BV_KDOP24][
BV_KDOP24] = &BVHConservativeAdvancement<KDOP<S, 24>, NarrowPhaseSolver>;
1015 conservative_advancement_matrix[
BV_kIOS][
BV_kIOS] = &BVHConservativeAdvancement<kIOS<S>, NarrowPhaseSolver>;
bool conservativeAdvancementShapeMeshOriented(const Shape &o1, const MotionBase< typename BV::S > *motion1, const BVHModel< BV > &o2, const MotionBase< typename BV::S > *motion2, const NarrowPhaseSolver *nsolver, const CollisionRequest< typename BV::S > &request, CollisionResult< typename BV::S > &result, typename BV::S &toc)
S delta_t
The delta_t each step.
BV::S BVHConservativeAdvancement(const CollisionGeometry< typename BV::S > *o1, const MotionBase< typename BV::S > *motion1, const CollisionGeometry< typename BV::S > *o2, const MotionBase< typename BV::S > *motion2, const NarrowPhaseSolver *nsolver, const ContinuousCollisionRequest< typename BV::S > &request, ContinuousCollisionResult< typename BV::S > &result)
Half Space: this is equivalent to the Planed in ODE. The separation plane is defined as n * x = d...
S toc
The time from beginning point.
static bool run(const Shape &o1, const MotionBase< S > *motion1, const BVHModel< OBBRSS< S >> &o2, const MotionBase< S > *motion2, const NarrowPhaseSolver *nsolver, const CollisionRequest< S > &request, CollisionResult< S > &result, S &toc)
Eigen::Transform< S, 3, Eigen::Isometry > Transform3
CollisionObject< S > * obj1
S time_of_contact
time of contact in [0, 1]
Shape1::S ShapeConservativeAdvancement(const CollisionGeometry< typename Shape1::S > *o1, const MotionBase< typename Shape1::S > *motion1, const CollisionGeometry< typename Shape1::S > *o2, const MotionBase< typename Shape1::S > *motion2, const NarrowPhaseSolver *nsolver, const ContinuousCollisionRequest< typename Shape1::S > &request, ContinuousCollisionResult< typename Shape1::S > &result)
static bool run(const Shape &o1, const MotionBase< S > *motion1, const BVHModel< RSS< S >> &o2, const MotionBase< S > *motion2, const NarrowPhaseSolver *nsolver, const CollisionRequest< S > &request, CollisionResult< S > &result, S &toc)
Transform3< Shape1::S > tf2
configuration of second object
continuous collision node using conservative advancement. when using this default version...
Traversal node for conservative advancement computation between BVH and shape.
ConservativeAdvancementFunctionMatrix()
bool conservativeAdvancementMeshShapeOriented(const BVHModel< BV > &o1, const MotionBase< typename BV::S > *motion1, const Shape &o2, const MotionBase< typename BV::S > *motion2, const NarrowPhaseSolver *nsolver, const CollisionRequest< typename BV::S > &request, CollisionResult< typename BV::S > &result, typename BV::S &toc)
The geometry for the object for collision or distance computation.
BV::S BVHShapeConservativeAdvancement(const CollisionGeometry< typename BV::S > *o1, const MotionBase< typename BV::S > *motion1, const CollisionGeometry< typename BV::S > *o2, const MotionBase< typename BV::S > *motion2, const NarrowPhaseSolver *nsolver, const ContinuousCollisionRequest< typename BV::S > &request, ContinuousCollisionResult< typename BV::S > &result)
bool conservativeAdvancement(const BVHModel< BV > &o1, const MotionBase< typename BV::S > *motion1, const BVHModel< BV > &o2, const MotionBase< typename BV::S > *motion2, const CollisionRequest< typename BV::S > &request, CollisionResult< typename BV::S > &result, typename BV::S &toc)
KDOP class describes the KDOP collision structures. K is set as the template parameter, which should be 16, 18, or 24 The KDOP structure is defined by some pairs of parallel planes defined by some axes. For K = 16, the planes are 6 AABB planes and 10 diagonal planes that cut off some space of the edges: (-1,0,0) and (1,0,0) -> indices 0 and 8 (0,-1,0) and (0,1,0) -> indices 1 and 9 (0,0,-1) and (0,0,1) -> indices 2 and 10 (-1,-1,0) and (1,1,0) -> indices 3 and 11 (-1,0,-1) and (1,0,1) -> indices 4 and 12 (0,-1,-1) and (0,1,1) -> indices 5 and 13 (-1,1,0) and (1,-1,0) -> indices 6 and 14 (-1,0,1) and (1,0,-1) -> indices 7 and 15 For K = 18, the planes are 6 AABB planes and 12 diagonal planes that cut off some space of the edges: (-1,0,0) and (1,0,0) -> indices 0 and 9 (0,-1,0) and (0,1,0) -> indices 1 and 10 (0,0,-1) and (0,0,1) -> indices 2 and 11 (-1,-1,0) and (1,1,0) -> indices 3 and 12 (-1,0,-1) and (1,0,1) -> indices 4 and 13 (0,-1,-1) and (0,1,1) -> indices 5 and 14 (-1,1,0) and (1,-1,0) -> indices 6 and 15 (-1,0,1) and (1,0,-1) -> indices 7 and 16 (0,-1,1) and (0,1,-1) -> indices 8 and 17 For K = 18, the planes are 6 AABB planes and 18 diagonal planes that cut off some space of the edges: (-1,0,0) and (1,0,0) -> indices 0 and 12 (0,-1,0) and (0,1,0) -> indices 1 and 13 (0,0,-1) and (0,0,1) -> indices 2 and 14 (-1,-1,0) and (1,1,0) -> indices 3 and 15 (-1,0,-1) and (1,0,1) -> indices 4 and 16 (0,-1,-1) and (0,1,1) -> indices 5 and 17 (-1,1,0) and (1,-1,0) -> indices 6 and 18 (-1,0,1) and (1,0,-1) -> indices 7 and 19 (0,-1,1) and (0,1,-1) -> indices 8 and 20 (-1, -1, 1) and (1, 1, -1) –> indices 9 and 21 (-1, 1, -1) and (1, -1, 1) –> indices 10 and 22 (1, -1, -1) and (-1, 1, 1) –> indices 11 and 23.
Parameters for performing collision request.
template void collide(CollisionTraversalNodeBase< double > *node, BVHFrontList *front_list)
template bool initialize(MeshCollisionTraversalNodeOBB< double > &node, const BVHModel< OBB< double >> &model1, const Transform3< double > &tf1, const BVHModel< OBB< double >> &model2, const Transform3< double > &tf2, const CollisionRequest< double > &request, CollisionResult< double > &result)
Center at zero point, axis aligned box.
bool is_collide
collision or not
continuous collision result
A class describing the bounding hierarchy of a mesh model or a point cloud model (which is viewed as ...
template void distanceRecurse(DistanceTraversalNodeBase< double > *node, int b1, int b2, BVHFrontList *front_list)
const MotionBase< S > * motion1
Motions for the two objects in query.
const MotionBase< S > * motion2
BV::S ShapeBVHConservativeAdvancement(const CollisionGeometry< typename BV::S > *o1, const MotionBase< typename BV::S > *motion1, const CollisionGeometry< typename BV::S > *o2, const MotionBase< typename BV::S > *motion2, const NarrowPhaseSolver *nsolver, const ContinuousCollisionRequest< typename BV::S > &request, ContinuousCollisionResult< typename BV::S > &result)
CollisionObject< S > * obj2
typename NarrowPhaseSolver::S S
Transform3< Shape1::S > tf1
configuation of first object
void getCurrentTransform(Matrix3< S > &R, Vector3< S > &T) const
Get the rotation and translation in current step.
Center at zero point sphere.
bool conservativeAdvancementMeshOriented(const BVHModel< BV > &o1, const MotionBase< typename BV::S > *motion1, const BVHModel< BV > &o2, const MotionBase< typename BV::S > *motion2, const CollisionRequest< typename BV::S > &request, CollisionResult< typename BV::S > &result, typename BV::S &toc)