mirror of
https://github.com/bulletphysics/bullet3
synced 2024-12-15 06:00:12 +00:00
69e5454d18
Use statically linked freeglut, instead of dynamic glut for the obsolete Bullet 2.x demos Add the 'reset' method to b3GpuDynamicsWorld, and use it in the BasicGpuDemo (pretty slow in debug mode, use release mode) Don't crash in btCollisionWorld, if there is no collision dispatcher
79 lines
2.1 KiB
C++
79 lines
2.1 KiB
C++
|
|
#ifndef BT_FRACTURE_BODY
|
|
#define BT_FRACTURE_BODY
|
|
|
|
class btCollisionShape;
|
|
class btDynamicsWorld;
|
|
class btCollisionWorld;
|
|
class btCompoundShape;
|
|
class btManifoldPoint;
|
|
|
|
#include "LinearMath/btAlignedObjectArray.h"
|
|
#include "BulletDynamics/Dynamics/btRigidBody.h"
|
|
|
|
#define CUSTOM_FRACTURE_TYPE (btRigidBody::CO_USER_TYPE+1)
|
|
|
|
|
|
struct btConnection
|
|
{
|
|
|
|
btCollisionShape* m_childShape0;
|
|
btCollisionShape* m_childShape1;
|
|
int m_childIndex0;
|
|
int m_childIndex1;
|
|
btScalar m_strength;
|
|
};
|
|
|
|
class btFractureBody : public btRigidBody
|
|
{
|
|
//connections
|
|
public:
|
|
|
|
btDynamicsWorld* m_world;
|
|
btAlignedObjectArray<btScalar> m_masses;
|
|
btAlignedObjectArray<btConnection> m_connections;
|
|
|
|
|
|
|
|
btFractureBody( const btRigidBodyConstructionInfo& constructionInfo, btDynamicsWorld* world)
|
|
:btRigidBody(constructionInfo),
|
|
m_world(world)
|
|
{
|
|
m_masses.push_back(constructionInfo.m_mass);
|
|
m_internalType=CUSTOM_FRACTURE_TYPE+CO_RIGID_BODY;
|
|
}
|
|
|
|
|
|
|
|
///btRigidBody constructor for backwards compatibility.
|
|
///To specify friction (etc) during rigid body construction, please use the other constructor (using btRigidBodyConstructionInfo)
|
|
btFractureBody( btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia, btScalar* masses, int numMasses, btDynamicsWorld* world)
|
|
:btRigidBody(mass,motionState,collisionShape,localInertia),
|
|
m_world(world)
|
|
{
|
|
|
|
for (int i=0;i<numMasses;i++)
|
|
m_masses.push_back(masses[i]);
|
|
|
|
m_internalType=CUSTOM_FRACTURE_TYPE+CO_RIGID_BODY;
|
|
}
|
|
|
|
|
|
|
|
void recomputeConnectivity(btCollisionWorld* world);
|
|
|
|
|
|
static btCompoundShape* shiftTransform(btCompoundShape* boxCompound,btScalar* masses,btTransform& shift, btVector3& principalInertia);
|
|
|
|
static btCompoundShape* shiftTransformDistributeMass(btCompoundShape* boxCompound,btScalar mass,btTransform& shift);
|
|
|
|
static bool collisionCallback(btManifoldPoint& cp, const btCollisionObject* colObj0,int partId0,int index0,const btCollisionObject* colObj1,int partId1,int index1);
|
|
|
|
};
|
|
|
|
|
|
void fractureCallback(btDynamicsWorld* world, btScalar timeStep);
|
|
void glueCallback(btDynamicsWorld* world, btScalar timeStep);
|
|
|
|
#endif //BT_FRACTURE_BODY
|