Bullet Collision Detection & Physics Library
btCollisionWorld.h
Go to the documentation of this file.
1/*
2Bullet Continuous Collision Detection and Physics Library
3Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
4
5This software is provided 'as-is', without any express or implied warranty.
6In no event will the authors be held liable for any damages arising from the use of this software.
7Permission is granted to anyone to use this software for any purpose,
8including commercial applications, and to alter it and redistribute it freely,
9subject to the following restrictions:
10
111. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
122. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
133. This notice may not be removed or altered from any source distribution.
14*/
15
69#ifndef BT_COLLISION_WORLD_H
70#define BT_COLLISION_WORLD_H
71
73class btConvexShape;
75class btSerializer;
76
79#include "btCollisionObject.h"
83
86{
87protected:
89
91
93
95
97
101
103
105
106public:
107 //this constructor doesn't own the dispatcher and paircache/broadphase
109
110 virtual ~btCollisionWorld();
111
113 {
115 }
116
118 {
120 }
121
123 {
125 }
126
128 {
130 }
131
133 {
134 return m_dispatcher1;
135 }
136
138 {
139 return m_dispatcher1;
140 }
141
143
144 virtual void updateAabbs();
145
148 virtual void computeOverlappingPairs();
149
151 {
153 }
154
156 {
157 return m_debugDrawer;
158 }
159
160 virtual void debugDrawWorld();
161
162 virtual void debugDrawObject(const btTransform& worldTransform, const btCollisionShape* shape, const btVector3& color);
163
167 {
170
171 //const btCollisionShape* m_shapeTemp;
172 //const btTransform* m_shapeLocalTransform;
173 };
174
176 {
185 {
186 }
187
192 };
193
196 {
201 //@BP Mod - Custom flags, currently used to enable backface culling on tri-meshes, see btRaycastCallback.h. Apply any of the EFlags defined there on m_flags here to invoke.
202 unsigned int m_flags;
203
205 {
206 }
207 bool hasHit() const
208 {
209 return (m_collisionObject != 0);
210 }
211
217 //@BP Mod
218 m_flags(0)
219 {
220 }
221
223 {
224 bool collides = (proxy0->m_collisionFilterGroup & m_collisionFilterMask) != 0;
225 collides = collides && (m_collisionFilterGroup & proxy0->m_collisionFilterMask);
226 return collides;
227 }
228
230 };
231
233 {
237 {
238 }
239
240 btVector3 m_rayFromWorld; //used to calculate hitPointWorld from hitFraction
242
245
247 {
248 //caller already does the filter on the m_closestHitFraction
249 btAssert(rayResult.m_hitFraction <= m_closestHitFraction);
250
251 m_closestHitFraction = rayResult.m_hitFraction;
252 m_collisionObject = rayResult.m_collisionObject;
254 {
255 m_hitNormalWorld = rayResult.m_hitNormalLocal;
256 }
257 else
258 {
261 }
263 return rayResult.m_hitFraction;
264 }
265 };
266
268 {
272 {
273 }
274
276
277 btVector3 m_rayFromWorld; //used to calculate hitPointWorld from hitFraction
279
283
285 {
286 m_collisionObject = rayResult.m_collisionObject;
287 m_collisionObjects.push_back(rayResult.m_collisionObject);
290 {
291 hitNormalWorld = rayResult.m_hitNormalLocal;
292 }
293 else
294 {
297 }
302 m_hitFractions.push_back(rayResult.m_hitFraction);
304 }
305 };
306
308 {
319 {
320 }
321
327 };
328
331 {
335
340 {
341 }
342
344 {
345 }
346
347 bool hasHit() const
348 {
349 return (m_closestHitFraction < btScalar(1.));
350 }
351
353 {
354 bool collides = (proxy0->m_collisionFilterGroup & m_collisionFilterMask) != 0;
355 collides = collides && (m_collisionFilterGroup & proxy0->m_collisionFilterMask);
356 return collides;
357 }
358
360 };
361
363 {
368 {
369 }
370
371 btVector3 m_convexFromWorld; //used to calculate hitPointWorld from hitFraction
373
377
379 {
380 //caller already does the filter on the m_closestHitFraction
382
383 m_closestHitFraction = convexResult.m_hitFraction;
384 m_hitCollisionObject = convexResult.m_hitCollisionObject;
386 {
387 m_hitNormalWorld = convexResult.m_hitNormalLocal;
388 }
389 else
390 {
393 }
394 m_hitPointWorld = convexResult.m_hitPointLocal;
395 return convexResult.m_hitFraction;
396 }
397 };
398
401 {
405
410 {
411 }
412
414 {
415 }
416
418 {
419 bool collides = (proxy0->m_collisionFilterGroup & m_collisionFilterMask) != 0;
420 collides = collides && (m_collisionFilterGroup & proxy0->m_collisionFilterMask);
421 return collides;
422 }
423
425 };
426
428 {
429 return int(m_collisionObjects.size());
430 }
431
434 virtual void rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, RayResultCallback& resultCallback) const;
435
438 void convexSweepTest(const btConvexShape* castShape, const btTransform& from, const btTransform& to, ConvexResultCallback& resultCallback, btScalar allowedCcdPenetration = btScalar(0.)) const;
439
442 void contactTest(btCollisionObject* colObj, ContactResultCallback& resultCallback);
443
447
455 RayResultCallback& resultCallback);
456
459 RayResultCallback& resultCallback);
460
466 ConvexResultCallback& resultCallback, btScalar allowedPenetration);
467
470 ConvexResultCallback& resultCallback, btScalar allowedPenetration);
471
473
475
477 {
478 return m_collisionObjects;
479 }
480
482 {
483 return m_collisionObjects;
484 }
485
487
489
491 {
492 return m_dispatchInfo;
493 }
494
496 {
497 return m_dispatchInfo;
498 }
499
501 {
503 }
505 {
507 }
508
510 virtual void serialize(btSerializer* serializer);
511};
512
513#endif //BT_COLLISION_WORLD_H
const T & btMax(const T &a, const T &b)
Definition btMinMax.h:27
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition btScalar.h:314
#define btAssert(x)
Definition btScalar.h:153
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
int size() const
return the number of elements in the array
void push_back(const T &_Val)
The btBroadphaseInterface class provides an interface to detect aabb-overlapping object pairs.
virtual btOverlappingPairCache * getOverlappingPairCache()=0
btCollisionConfiguration allows to configure Bullet collision detection stack allocator size,...
btCollisionObject can be used to manage collision detection objects.
btTransform & getWorldTransform()
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
CollisionWorld is interface and container for the collision detection.
virtual void rayTest(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, RayResultCallback &resultCallback) const
rayTest performs a raycast on all objects in the btCollisionWorld, and calls the resultCallback This ...
virtual void updateAabbs()
btDispatcherInfo m_dispatchInfo
btDispatcher * getDispatcher()
btDispatcherInfo & getDispatchInfo()
virtual void serialize(btSerializer *serializer)
Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (Bulle...
virtual void debugDrawWorld()
btOverlappingPairCache * getPairCache()
static void objectQuerySingleInternal(const btConvexShape *castShape, const btTransform &convexFromTrans, const btTransform &convexToTrans, const btCollisionObjectWrapper *colObjWrap, ConvexResultCallback &resultCallback, btScalar allowedPenetration)
virtual btIDebugDraw * getDebugDrawer()
virtual void refreshBroadphaseProxy(btCollisionObject *collisionObject)
btBroadphaseInterface * m_broadphasePairCache
void updateSingleAabb(btCollisionObject *colObj)
void setForceUpdateAllAabbs(bool forceUpdateAllAabbs)
virtual void removeCollisionObject(btCollisionObject *collisionObject)
virtual void addCollisionObject(btCollisionObject *collisionObject, int collisionFilterGroup=btBroadphaseProxy::DefaultFilter, int collisionFilterMask=btBroadphaseProxy::AllFilter)
btAlignedObjectArray< btCollisionObject * > m_collisionObjects
virtual void setDebugDrawer(btIDebugDraw *debugDrawer)
int getNumCollisionObjects() const
virtual void performDiscreteCollisionDetection()
btCollisionObjectArray & getCollisionObjectArray()
static void rayTestSingleInternal(const btTransform &rayFromTrans, const btTransform &rayToTrans, const btCollisionObjectWrapper *collisionObjectWrap, RayResultCallback &resultCallback)
const btCollisionObjectArray & getCollisionObjectArray() const
void convexSweepTest(const btConvexShape *castShape, const btTransform &from, const btTransform &to, ConvexResultCallback &resultCallback, btScalar allowedCcdPenetration=btScalar(0.)) const
convexTest performs a swept convex cast on all objects in the btCollisionWorld, and calls the resultC...
bool m_forceUpdateAllAabbs
m_forceUpdateAllAabbs can be set to false as an optimization to only update active object AABBs it is...
const btDispatcherInfo & getDispatchInfo() const
btIDebugDraw * m_debugDrawer
btBroadphaseInterface * getBroadphase()
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....
btDispatcher * m_dispatcher1
void contactPairTest(btCollisionObject *colObjA, btCollisionObject *colObjB, ContactResultCallback &resultCallback)
contactTest performs a discrete collision test between two collision objects and calls the resultCall...
void serializeContactManifolds(btSerializer *serializer)
const btDispatcher * getDispatcher() const
bool getForceUpdateAllAabbs() const
virtual void debugDrawObject(const btTransform &worldTransform, const btCollisionShape *shape, const btVector3 &color)
static void rayTestSingle(const btTransform &rayFromTrans, const btTransform &rayToTrans, btCollisionObject *collisionObject, const btCollisionShape *collisionShape, const btTransform &colObjWorldTransform, RayResultCallback &resultCallback)
rayTestSingle performs a raycast call and calls the resultCallback.
void setBroadphase(btBroadphaseInterface *pairCache)
const btBroadphaseInterface * getBroadphase() const
void contactTest(btCollisionObject *colObj, ContactResultCallback &resultCallback)
contactTest performs a discrete collision test between colObj against all objects in the btCollisionW...
void serializeCollisionObjects(btSerializer *serializer)
virtual void computeOverlappingPairs()
the computeOverlappingPairs is usually already called by performDiscreteCollisionDetection (or stepSi...
The btConvexShape is an abstract shape interface, implemented by all convex shapes such as btBoxShape...
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations.
ManifoldContactPoint collects and maintains persistent contactpoints.
The btOverlappingPairCache provides an interface for overlapping pair management (add,...
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition btTransform.h:30
btMatrix3x3 & getBasis()
Return the basis matrix for the rotation.
btVector3 can be used to represent 3D points and vectors.
Definition btVector3.h:82
void setInterpolate3(const btVector3 &v0, const btVector3 &v1, btScalar rt)
Definition btVector3.h:492
The btBroadphaseProxy is the main class that can be used with the Bullet broadphases.
AllHitsRayResultCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld)
virtual btScalar addSingleResult(LocalRayResult &rayResult, bool normalInWorldSpace)
btAlignedObjectArray< const btCollisionObject * > m_collisionObjects
btAlignedObjectArray< btScalar > m_hitFractions
btAlignedObjectArray< btVector3 > m_hitPointWorld
btAlignedObjectArray< btVector3 > m_hitNormalWorld
virtual btScalar addSingleResult(LocalConvexResult &convexResult, bool normalInWorldSpace)
ClosestConvexResultCallback(const btVector3 &convexFromWorld, const btVector3 &convexToWorld)
virtual btScalar addSingleResult(LocalRayResult &rayResult, bool normalInWorldSpace)
ClosestRayResultCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld)
ContactResultCallback is used to report contact points.
virtual btScalar addSingleResult(btManifoldPoint &cp, const btCollisionObjectWrapper *colObj0Wrap, int partId0, int index0, const btCollisionObjectWrapper *colObj1Wrap, int partId1, int index1)=0
virtual bool needsCollision(btBroadphaseProxy *proxy0) const
RayResultCallback is used to report new raycast results.
virtual bool needsCollision(btBroadphaseProxy *proxy0) const
virtual btScalar addSingleResult(LocalConvexResult &convexResult, bool normalInWorldSpace)=0
const btCollisionObject * m_hitCollisionObject
LocalConvexResult(const btCollisionObject *hitCollisionObject, LocalShapeInfo *localShapeInfo, const btVector3 &hitNormalLocal, const btVector3 &hitPointLocal, btScalar hitFraction)
const btCollisionObject * m_collisionObject
LocalRayResult(const btCollisionObject *collisionObject, LocalShapeInfo *localShapeInfo, const btVector3 &hitNormalLocal, btScalar hitFraction)
LocalShapeInfo gives extra information for complex shapes Currently, only btTriangleMeshShape is avai...
RayResultCallback is used to report new raycast results.
virtual bool needsCollision(btBroadphaseProxy *proxy0) const
virtual btScalar addSingleResult(LocalRayResult &rayResult, bool normalInWorldSpace)=0
const btCollisionObject * m_collisionObject