btGjkPairDetector uses GJK to implement the btDiscreteCollisionDetectorInterface
More...
#include <btGjkPairDetector.h>
|
| btGjkPairDetector (const btConvexShape *objectA, const btConvexShape *objectB, btSimplexSolverInterface *simplexSolver, btConvexPenetrationDepthSolver *penetrationDepthSolver) |
|
| btGjkPairDetector (const btConvexShape *objectA, const btConvexShape *objectB, int shapeTypeA, int shapeTypeB, btScalar marginA, btScalar marginB, btSimplexSolverInterface *simplexSolver, btConvexPenetrationDepthSolver *penetrationDepthSolver) |
|
virtual | ~btGjkPairDetector () |
|
virtual void | getClosestPoints (const ClosestPointInput &input, Result &output, class btIDebugDraw *debugDraw, bool swapResults=false) |
|
void | getClosestPointsNonVirtual (const ClosestPointInput &input, Result &output, class btIDebugDraw *debugDraw) |
|
void | setMinkowskiA (const btConvexShape *minkA) |
|
void | setMinkowskiB (const btConvexShape *minkB) |
|
void | setCachedSeparatingAxis (const btVector3 &separatingAxis) |
|
const btVector3 & | getCachedSeparatingAxis () const |
|
btScalar | getCachedSeparatingDistance () const |
|
void | setPenetrationDepthSolver (btConvexPenetrationDepthSolver *penetrationDepthSolver) |
|
void | setIgnoreMargin (bool ignoreMargin) |
| don't use setIgnoreMargin, it's for Bullet's internal use More...
|
|
virtual | ~btDiscreteCollisionDetectorInterface () |
|
virtual void | getClosestPoints (const ClosestPointInput &input, Result &output, class btIDebugDraw *debugDraw, bool swapResults=false)=0 |
|
◆ btGjkPairDetector() [1/2]
◆ btGjkPairDetector() [2/2]
◆ ~btGjkPairDetector()
virtual btGjkPairDetector::~btGjkPairDetector |
( |
| ) |
|
|
inlinevirtual |
◆ getCachedSeparatingAxis()
const btVector3 & btGjkPairDetector::getCachedSeparatingAxis |
( |
| ) |
const |
|
inline |
◆ getCachedSeparatingDistance()
btScalar btGjkPairDetector::getCachedSeparatingDistance |
( |
| ) |
const |
|
inline |
◆ getClosestPoints()
◆ getClosestPointsNonVirtual()
this is another degenerate case, where the initial GJK calculation reports a degenerate case EPA reports no penetration, and the second GJK (using the supporting vector without margin) reports a valid positive distance. Use the results of the second GJK instead of failing. thanks to Jacob.Langford for the reproduction case http://code.google.com/p/bullet/issues/detail?id=250
todo: need to track down this EPA penetration solver degeneracy the penetration solver reports penetration but the contact normal connecting the contact points is pointing in the opposite direction until then, detect the issue and revert the normal
Definition at line 688 of file btGjkPairDetector.cpp.
◆ setCachedSeparatingAxis()
void btGjkPairDetector::setCachedSeparatingAxis |
( |
const btVector3 & |
separatingAxis | ) |
|
|
inline |
◆ setIgnoreMargin()
void btGjkPairDetector::setIgnoreMargin |
( |
bool |
ignoreMargin | ) |
|
|
inline |
◆ setMinkowskiA()
void btGjkPairDetector::setMinkowskiA |
( |
const btConvexShape * |
minkA | ) |
|
|
inline |
◆ setMinkowskiB()
void btGjkPairDetector::setMinkowskiB |
( |
const btConvexShape * |
minkB | ) |
|
|
inline |
◆ setPenetrationDepthSolver()
◆ m_cachedSeparatingAxis
btVector3 btGjkPairDetector::m_cachedSeparatingAxis |
|
private |
◆ m_cachedSeparatingDistance
btScalar btGjkPairDetector::m_cachedSeparatingDistance |
|
private |
◆ m_catchDegeneracies
int btGjkPairDetector::m_catchDegeneracies |
◆ m_curIter
int btGjkPairDetector::m_curIter |
◆ m_degenerateSimplex
int btGjkPairDetector::m_degenerateSimplex |
◆ m_fixContactNormalDirection
int btGjkPairDetector::m_fixContactNormalDirection |
◆ m_ignoreMargin
bool btGjkPairDetector::m_ignoreMargin |
|
private |
◆ m_lastUsedMethod
int btGjkPairDetector::m_lastUsedMethod |
◆ m_marginA
◆ m_marginB
◆ m_minkowskiA
◆ m_minkowskiB
◆ m_penetrationDepthSolver
◆ m_shapeTypeA
int btGjkPairDetector::m_shapeTypeA |
|
private |
◆ m_shapeTypeB
int btGjkPairDetector::m_shapeTypeB |
|
private |
◆ m_simplexSolver
The documentation for this class was generated from the following files: