29 btAssert(!m_overlappingObjects.size());
37 int index = m_overlappingObjects.findLinearSearch(otherObject);
38 if (index == m_overlappingObjects.size())
41 m_overlappingObjects.push_back(otherObject);
49 int index = m_overlappingObjects.findLinearSearch(otherObject);
50 if (index < m_overlappingObjects.size())
52 m_overlappingObjects[index] = m_overlappingObjects[m_overlappingObjects.size() - 1];
53 m_overlappingObjects.pop_back();
64 m_hashPairCache->~btHashedOverlappingPairCache();
75 int index = m_overlappingObjects.findLinearSearch(otherObject);
76 if (index == m_overlappingObjects.size())
78 m_overlappingObjects.push_back(otherObject);
79 m_hashPairCache->addOverlappingPair(actualThisProxy, otherProxy);
90 int index = m_overlappingObjects.findLinearSearch(otherObject);
91 if (index < m_overlappingObjects.size())
93 m_overlappingObjects[index] = m_overlappingObjects[m_overlappingObjects.size() - 1];
94 m_overlappingObjects.pop_back();
95 m_hashPairCache->removeOverlappingPair(actualThisProxy, otherProxy, dispatcher);
102 convexFromTrans = convexFromWorld;
103 convexToTrans = convexToWorld;
104 btVector3 castShapeAabbMin, castShapeAabbMax;
111 R.setRotation(convexFromTrans.getRotation());
112 castShape->calculateTemporalAabb(
R, linVel, angVel, 1.0, castShapeAabbMin, castShapeAabbMax);
118 for (i = 0; i < m_overlappingObjects.size(); i++)
122 if (resultCallback.
needsCollision(collisionObject->getBroadphaseHandle()))
125 btVector3 collisionObjectAabbMin, collisionObjectAabbMax;
126 collisionObject->getCollisionShape()->getAabb(collisionObject->getWorldTransform(), collisionObjectAabbMin, collisionObjectAabbMax);
127 AabbExpand(collisionObjectAabbMin, collisionObjectAabbMax, castShapeAabbMin, castShapeAabbMax);
130 if (
btRayAabb(convexFromWorld.getOrigin(), convexToWorld.getOrigin(), collisionObjectAabbMin, collisionObjectAabbMax, hitLambda, hitNormal))
134 collisionObject->getCollisionShape(),
135 collisionObject->getWorldTransform(),
137 allowedCcdPenetration);
146 rayFromTrans.setIdentity();
147 rayFromTrans.setOrigin(rayFromWorld);
149 rayToTrans.setIdentity();
150 rayToTrans.setOrigin(rayToWorld);
153 for (i = 0; i < m_overlappingObjects.size(); i++)
157 if (resultCallback.
needsCollision(collisionObject->getBroadphaseHandle()))
161 collisionObject->getCollisionShape(),
162 collisionObject->getWorldTransform(),
SIMD_FORCE_INLINE bool btRayAabb(const btVector3 &rayFrom, const btVector3 &rayTo, const btVector3 &aabbMin, const btVector3 &aabbMax, btScalar ¶m, btVector3 &normal)
SIMD_FORCE_INLINE void AabbExpand(btVector3 &aabbMin, btVector3 &aabbMax, const btVector3 &expansionMin, const btVector3 &expansionMax)
#define btAlignedFree(ptr)
#define btAlignedAlloc(size, alignment)
SIMD_FORCE_INLINE btBroadphaseProxy * getBroadphaseHandle()
btConvexShape()
not supported on IBM SDK, until we fix the alignment of btVector3
void convexSweepTest(const class btConvexShape *castShape, const btTransform &convexFromWorld, const btTransform &convexToWorld, btCollisionWorld::ConvexResultCallback &resultCallback, btScalar allowedCcdPenetration=0.f) const
virtual void addOverlappingObjectInternal(btBroadphaseProxy *otherProxy, btBroadphaseProxy *thisProxy=0)
this method is mainly for expert/internal use only.
virtual void removeOverlappingObjectInternal(btBroadphaseProxy *otherProxy, btDispatcher *dispatcher, btBroadphaseProxy *thisProxy=0)
this method is mainly for expert/internal use only.
void rayTest(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, btCollisionWorld::RayResultCallback &resultCallback) const
btHashedOverlappingPairCache()
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
static void objectQuerySingle(const btConvexShape *castShape, const btTransform &rayFromTrans, const btTransform &rayToTrans, btCollisionObject *collisionObject, const btCollisionShape *collisionShape, const btTransform &colObjWorldTransform, ConvexResultCallback &resultCallback, btScalar allowedPenetration)
objectQuerySingle performs a collision detection query and calls the resultCallback....
static void rayTestSingle(const btTransform &rayFromTrans, const btTransform &rayToTrans, btCollisionObject *collisionObject, const btCollisionShape *collisionShape, const btTransform &colObjWorldTransform, RayResultCallback &resultCallback)
btPairCachingGhostObject()
virtual void addOverlappingObjectInternal(btBroadphaseProxy *otherProxy, btBroadphaseProxy *thisProxy=0)
this method is mainly for expert/internal use only.
virtual void removeOverlappingObjectInternal(btBroadphaseProxy *otherProxy, btDispatcher *dispatcher, btBroadphaseProxy *thisProxy=0)
virtual ~btPairCachingGhostObject()
RayResultCallback is used to report new raycast results.
virtual bool needsCollision(btBroadphaseProxy *proxy0) const
RayResultCallback is used to report new raycast results.
virtual bool needsCollision(btBroadphaseProxy *proxy0) const