28 m_isSwapped(isSwapped)
73 if (
getSphereDistance(boxObjWrap, pOnBox, normalOnSurfaceB, penetrationDepth, sphereCenter, radius, maxContactDistance))
106 penetrationDepth = 1.0f;
121 btScalar intersectionDist = fRadius + boxMargin;
122 btScalar contactDist = intersectionDist + maxContactDistance;
123 normal = sphereRelPos - closestPoint;
127 if (dist2 > contactDist * contactDist)
141 distance = normal.
length();
145 pointOnBox = closestPoint + normal * boxMargin;
147 penetrationDepth = distance - intersectionDist;
165 closestPoint.
setX( boxHalfExtent.
getX() );
168 faceDist = boxHalfExtent.
getX() + sphereRelPos.
getX();
169 if (faceDist < minDist)
172 closestPoint = sphereRelPos;
173 closestPoint.
setX( -boxHalfExtent.
getX() );
177 faceDist = boxHalfExtent.
getY() - sphereRelPos.
getY();
178 if (faceDist < minDist)
181 closestPoint = sphereRelPos;
182 closestPoint.
setY( boxHalfExtent.
getY() );
186 faceDist = boxHalfExtent.
getY() + sphereRelPos.
getY();
187 if (faceDist < minDist)
190 closestPoint = sphereRelPos;
191 closestPoint.
setY( -boxHalfExtent.
getY() );
195 faceDist = boxHalfExtent.
getZ() - sphereRelPos.
getZ();
196 if (faceDist < minDist)
199 closestPoint = sphereRelPos;
200 closestPoint.
setZ( boxHalfExtent.
getZ() );
204 faceDist = boxHalfExtent.
getZ() + sphereRelPos.
getZ();
205 if (faceDist < minDist)
208 closestPoint = sphereRelPos;
209 closestPoint.
setZ( -boxHalfExtent.
getZ() );
virtual void releaseManifold(btPersistentManifold *manifold)=0
btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping...
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
btScalar getContactBreakingThreshold() const
btSphereBoxCollisionAlgorithm(btPersistentManifold *mf, const btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped)
void setZ(btScalar _z)
Set the z value.
void setPersistentManifold(btPersistentManifold *manifoldPtr)
This class is not enabled yet (work-in-progress) to more aggressively activate objects.
void refreshContactPoints()
The btSphereShape implements an implicit sphere, centered around a local origin with radius...
virtual void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
btManifoldResult is a helper class to manage contact results.
const btVector3 & getHalfExtentsWithoutMargin() const
virtual btScalar getMargin() const
btDispatcher * m_dispatcher
const btScalar & getZ() const
Return the z value.
virtual ~btSphereBoxCollisionAlgorithm()
virtual void addContactPoint(const btVector3 &normalOnBInWorld, const btVector3 &pointInWorld, btScalar depth)
void setX(btScalar _x)
Set the x value.
bool getSphereDistance(const btCollisionObjectWrapper *boxObjWrap, btVector3 &v3PointOnBox, btVector3 &normal, btScalar &penetrationDepth, const btVector3 &v3SphereCenter, btScalar fRadius, btScalar maxContactDistance)
btScalar getSpherePenetration(btVector3 const &boxHalfExtent, btVector3 const &sphereRelPos, btVector3 &closestPoint, btVector3 &normal)
const btScalar & getY() const
Return the y value.
const btTransform & getWorldTransform() const
void setY(btScalar _y)
Set the y value.
btCollisionObject can be used to manage collision detection objects.
const btScalar & getX() const
Return the x value.
btScalar length() const
Return the length of the vector.
virtual btPersistentManifold * getNewManifold(const btCollisionObject *b0, const btCollisionObject *b1)=0
const btCollisionShape * getCollisionShape() const
The btBoxShape is a box primitive around the origin, its sides axis aligned with length specified by ...
btVector3 can be used to represent 3D points and vectors.
btScalar length2() const
Return the length of the vector squared.
int getNumContacts() const
const T & btMax(const T &a, const T &b)
btScalar getRadius() const
virtual bool needsCollision(const btCollisionObject *body0, const btCollisionObject *body1)=0
virtual btScalar calculateTimeOfImpact(btCollisionObject *body0, btCollisionObject *body1, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
const T & btMin(const T &a, const T &b)
btPersistentManifold * m_manifoldPtr
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
const btCollisionObject * getCollisionObject() const