Added full featured saving support including collision geometry and constraints.

This commit is contained in:
johnmccutchan
2008-01-30 01:53:08 +00:00
parent 8fff5c54e9
commit 7c40589831
2 changed files with 848 additions and 74 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -23,51 +23,49 @@ subject to the following restrictions:
class btCollisionShape; class btCollisionShape;
class btRigidBody; class btRigidBody;
class btTypedConstraint; class btTypedConstraint;
class ConstraintInput; class ConstraintInput;
//use some reasonable number here
#define COLLADA_CONVERTER_MAX_NUM_OBJECTS 32768
//namespace..
///ColladaConverter helps converting the physics assets from COLLADA DOM into physics objects ///ColladaConverter helps converting the physics assets from COLLADA DOM into physics objects
class ColladaConverter class ColladaConverter
{ {
protected: protected:
class DAE* m_collada; class DAE* m_collada;
class domCOLLADA* m_dom; class domCOLLADA* m_dom;
const char* m_filename; char* m_filename;
float m_unitMeterScaling; float m_unitMeterScaling;
int m_numObjects; void PreparePhysicsObject(struct btRigidBodyInput& input, bool isDynamics, float mass,btCollisionShape* colShape, btVector3 linearVelocity, btVector3 angularVelocity);
btRigidBody* m_rigidBodies[COLLADA_CONVERTER_MAX_NUM_OBJECTS];
void PreparePhysicsObject(struct btRigidBodyInput& input, bool isDynamics, float mass,btCollisionShape* colShape);
void prepareConstraints(ConstraintInput& input); void prepareConstraints(ConstraintInput& input);
void ConvertRigidBodyRef( struct btRigidBodyInput& , struct btRigidBodyOutput& output ); void ConvertRigidBodyRef( struct btRigidBodyInput& , struct btRigidBodyOutput& output );
bool convert ();
void addConvexHull (btCollisionShape* shape, const char* nodeName, class domLibrary_geometries* geomLib);
void addConvexMesh (btCollisionShape* shape, const char* nodeName, class domLibrary_geometries* geomLib);
void addConcaveMesh(btCollisionShape* shape, const char* nodeName, class domLibrary_geometries* geomLib);
void addNode (btRigidBody* body, const char* nodeName, const char* shapeName, class domVisual_scene* vscene);
void addConstraint (btTypedConstraint* constraint, class domPhysics_model* physicsModel);
void addConstraintInstance (btTypedConstraint* constraint, class domInstance_physics_model* mi);
void addMaterial (btRigidBody* body, const char* nodeName, class domLibrary_physics_materials* materialsLib);
void buildShape (btCollisionShape* shape, void* collada_shape, const char* shapeName, class domLibrary_geometries* geomLib);
void addRigidBody (btRigidBody* body, const char* nodeName, const char* shapeName, class domPhysics_model* physicsModel, class domLibrary_geometries* geomLib);
void addRigidBodyInstance (btRigidBody* body, const char* nodeName, class domInstance_physics_model* mi);
public: public:
ColladaConverter(); ColladaConverter();
///open a COLLADA .dae file ///load a COLLADA .dae file
bool load(const char* filename); bool load(const char* filename);
///save a snapshot in COLLADA physics .dae format. ///save a snapshot in COLLADA physics .dae format.
///if the filename is left empty, modify the filename used during loading ///if the filename is left empty, modify the filename used during loading
bool saveAs(const char* filename = 0); bool save(const char* filename = 0);
///convert a Collada DOM document and call the 2 virtual methods for each rigid body/constraint ///those virtuals are called by load and save.
bool convert();
///those 2 virtuals are called for each constraint/physics object
virtual btTypedConstraint* createUniversalD6Constraint( virtual btTypedConstraint* createUniversalD6Constraint(
class btRigidBody* body0,class btRigidBody* otherBody, class btRigidBody* body0,class btRigidBody* otherBody,
btTransform& localAttachmentFrameRef, btTransform& localAttachmentFrameRef,
@@ -78,16 +76,17 @@ public:
const btVector3& angularMaxLimits, const btVector3& angularMaxLimits,
bool disableCollisionsBetweenLinkedBodies bool disableCollisionsBetweenLinkedBodies
) = 0; ) = 0;
virtual btRigidBody* createRigidBody(bool isDynamic, virtual btRigidBody* createRigidBody(bool isDynamic,
float mass, float mass,
const btTransform& startTransform, const btTransform& startTransform,
btCollisionShape* shape) = 0; btCollisionShape* shape) = 0;
virtual int getNumRigidBodies () = 0;
virtual btRigidBody* getRigidBody (int i) = 0;
virtual int getNumConstraints () = 0;
virtual btTypedConstraint* getConstraint (int i) = 0;
virtual void setGravity(const btVector3& gravity) = 0; virtual void setGravity(const btVector3& gravity) = 0;
virtual btVector3 getGravity () = 0;
virtual void setCameraInfo(const btVector3& up, int forwardAxis) = 0; virtual void setCameraInfo(const btVector3& up, int forwardAxis) = 0;
}; };
#endif //COLLADA_CONVERTER_H #endif //COLLADA_CONVERTER_H