Bullet Collision Detection & Physics Library
btCollisionObject.cpp
Go to the documentation of this file.
1/*
2Bullet Continuous Collision Detection and Physics Library
3Copyright (c) 2003-2006 Erwin Coumans https://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
16#include "btCollisionObject.h"
19
21 : m_interpolationLinearVelocity(0.f, 0.f, 0.f),
22 m_interpolationAngularVelocity(0.f, 0.f, 0.f),
23 m_anisotropicFriction(1.f, 1.f, 1.f),
24 m_hasAnisotropicFriction(false),
25 m_contactProcessingThreshold(BT_LARGE_FLOAT),
26 m_broadphaseHandle(0),
27 m_collisionShape(0),
28 m_extensionPointer(0),
29 m_rootCollisionShape(0),
30 m_collisionFlags(btCollisionObject::CF_STATIC_OBJECT),
31 m_islandTag1(-1),
32 m_companionId(-1),
33 m_worldArrayIndex(-1),
34 m_activationState1(1),
35 m_deactivationTime(btScalar(0.)),
36 m_friction(btScalar(0.5)),
37 m_restitution(btScalar(0.)),
38 m_rollingFriction(0.0f),
39 m_spinningFriction(0.f),
40 m_contactDamping(.1),
41 m_contactStiffness(BT_LARGE_FLOAT),
42 m_internalType(CO_COLLISION_OBJECT),
43 m_userObjectPointer(0),
44 m_userIndex2(-1),
45 m_userIndex(-1),
46 m_userIndex3(-1),
47 m_hitFraction(btScalar(1.)),
48 m_ccdSweptSphereRadius(btScalar(0.)),
49 m_ccdMotionThreshold(btScalar(0.)),
50 m_checkCollideWith(false),
51 m_updateRevision(0)
52{
55}
56
58{
59}
60
62{
64 m_activationState1 = newState;
65}
66
68{
69 m_activationState1 = newState;
70}
71
72void btCollisionObject::activate(bool forceActivation) const
73{
74 if (forceActivation || !(m_collisionFlags & (CF_STATIC_OBJECT | CF_KINEMATIC_OBJECT)))
75 {
78 }
79}
80
81const char* btCollisionObject::serialize(void* dataBuffer, btSerializer* serializer) const
82{
83 btCollisionObjectData* dataOut = (btCollisionObjectData*)dataBuffer;
84
85 m_worldTransform.serialize(dataOut->m_worldTransform);
86 m_interpolationWorldTransform.serialize(dataOut->m_interpolationWorldTransform);
87 m_interpolationLinearVelocity.serialize(dataOut->m_interpolationLinearVelocity);
88 m_interpolationAngularVelocity.serialize(dataOut->m_interpolationAngularVelocity);
89 m_anisotropicFriction.serialize(dataOut->m_anisotropicFriction);
90 dataOut->m_hasAnisotropicFriction = m_hasAnisotropicFriction;
91 dataOut->m_contactProcessingThreshold = m_contactProcessingThreshold;
92 dataOut->m_broadphaseHandle = 0;
93 dataOut->m_collisionShape = serializer->getUniquePointer(m_collisionShape);
94 dataOut->m_rootCollisionShape = 0; //@todo
95 dataOut->m_collisionFlags = m_collisionFlags;
96 dataOut->m_islandTag1 = m_islandTag1;
97 dataOut->m_companionId = m_companionId;
98 dataOut->m_activationState1 = m_activationState1;
99 dataOut->m_deactivationTime = m_deactivationTime;
100 dataOut->m_friction = m_friction;
101 dataOut->m_rollingFriction = m_rollingFriction;
102 dataOut->m_contactDamping = m_contactDamping;
103 dataOut->m_contactStiffness = m_contactStiffness;
104 dataOut->m_restitution = m_restitution;
105 dataOut->m_internalType = m_internalType;
106
107 char* name = (char*)serializer->findNameForPointer(this);
108 dataOut->m_name = (char*)serializer->getUniquePointer(name);
109 if (dataOut->m_name)
110 {
111 serializer->serializeName(name);
112 }
113 dataOut->m_hitFraction = m_hitFraction;
114 dataOut->m_ccdSweptSphereRadius = m_ccdSweptSphereRadius;
115 dataOut->m_ccdMotionThreshold = m_ccdMotionThreshold;
116 dataOut->m_checkCollideWith = m_checkCollideWith;
118 {
119 dataOut->m_collisionFilterGroup = m_broadphaseHandle->m_collisionFilterGroup;
120 dataOut->m_collisionFilterMask = m_broadphaseHandle->m_collisionFilterMask;
121 dataOut->m_uniqueId = m_broadphaseHandle->m_uniqueId;
122 }
123 else
124 {
125 dataOut->m_collisionFilterGroup = 0;
126 dataOut->m_collisionFilterMask = 0;
127 dataOut->m_uniqueId = -1;
128 }
130}
131
133{
135 btChunk* chunk = serializer->allocate(len, 1);
136 const char* structType = serialize(chunk->m_oldPtr, serializer);
137 serializer->finalizeChunk(chunk, structType, BT_COLLISIONOBJECT_CODE, (void*)this);
138}
#define ACTIVE_TAG
#define btCollisionObjectData
#define DISABLE_DEACTIVATION
#define btCollisionObjectDataName
#define DISABLE_SIMULATION
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:314
#define BT_LARGE_FLOAT
Definition: btScalar.h:316
#define BT_COLLISIONOBJECT_CODE
Definition: btSerializer.h:111
void * m_oldPtr
Definition: btSerializer.h:52
btCollisionObject can be used to manage collision detection objects.
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
int m_checkCollideWith
If some object should have elaborate collision filtering by sub-classes.
btTransform m_worldTransform
btCollisionShape * m_collisionShape
virtual void serializeSingleObject(class btSerializer *serializer) const
btVector3 m_interpolationLinearVelocity
void activate(bool forceActivation=false) const
void setActivationState(int newState) const
btVector3 m_interpolationAngularVelocity
int m_internalType
m_internalType is reserved to distinguish Bullet's btCollisionObject, btRigidBody,...
btVector3 m_anisotropicFriction
btScalar m_ccdSweptSphereRadius
Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
virtual int calculateSerializeBufferSize() const
btTransform m_interpolationWorldTransform
m_interpolationWorldTransform is used for CCD and interpolation it can be either previous or future (...
void forceActivationState(int newState) const
btScalar m_ccdMotionThreshold
Don't do continuous collision detection if the motion (in one step) is less then m_ccdMotionThreshold...
btScalar m_contactProcessingThreshold
btBroadphaseProxy * m_broadphaseHandle
btScalar m_hitFraction
time of impact calculation
virtual btChunk * allocate(size_t size, int numElements)=0
virtual void * getUniquePointer(void *oldPtr)=0
virtual void serializeName(const char *ptr)=0
virtual const char * findNameForPointer(const void *ptr) const =0
virtual void finalizeChunk(btChunk *chunk, const char *structType, int chunkCode, void *oldPtr)=0
void serialize(struct btTransformData &dataOut) const
Definition: btTransform.h:257
void setIdentity()
Set this transformation to the identity.
Definition: btTransform.h:167
void serialize(struct btVector3Data &dataOut) const
Definition: btVector3.h:1317