Skip to content

Commit

Permalink
investigating in bullet ccd, add correspond sample, some library imporve
Browse files Browse the repository at this point in the history
  • Loading branch information
soniccat committed Mar 27, 2010
1 parent 49df4ca commit abf1d49
Show file tree
Hide file tree
Showing 29 changed files with 1,654 additions and 1,016 deletions.
10 changes: 5 additions & 5 deletions BlenderWork/cameras/Camera
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
type Camera
name Camera
pos -7.481132 5.343665 -6.507640
see -6.826270 4.898420 -5.896974
end
type Camera
name Camera
pos -12.485068 4.323415 -24.932487
see -11.830207 3.878170 -24.321821
end
Binary file added BlenderWork/colisionTestt.blend
Binary file not shown.
93 changes: 0 additions & 93 deletions BlenderWork/meshes/Plane.001

This file was deleted.

33 changes: 33 additions & 0 deletions src/3D/SEMesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -188,4 +188,37 @@ void SEMesh::GetTriangleMesh( btTriangleMeshPtr triangleMesh )

++start;
}
}

btBoxShapePtr SEMesh::GetBoxShape( )
{
float minX = FLT_MAX, maxX = FLT_MIN;
float minY = FLT_MAX, maxY = FLT_MIN;
float minZ = FLT_MAX, maxZ = FLT_MIN;

float* vertexArray = mVertexArray.get();
for( int i=0; i<mVertexArraySize; i+=3 )
{
if( minX > vertexArray[i] ) minX = vertexArray[i];
if( maxX < vertexArray[i] ) maxX = vertexArray[i];

if( minY > vertexArray[i+1] ) minY = vertexArray[i+1];
if( maxY < vertexArray[i+1] ) maxY = vertexArray[i+1];

if( minZ > vertexArray[i+2] ) minZ = vertexArray[i+2];
if( maxZ < vertexArray[i+2] ) maxZ = vertexArray[i+2];
}

btVector3 vec = btVector3( (maxX - minX)/2.0f,
(maxY - minY)/2.0f,
(maxZ - minZ)/2.0f );

/*if( vec.x() < 0.1 )
vec.setX(0.1f);
if( vec.y() < 0.1 )
vec.setY(0.1f);
if( vec.z() < 0.1 )
vec.setZ(0.1f);*/

return btBoxShapePtr( SENewObject<btBoxShape>( vec ) );
}
5 changes: 3 additions & 2 deletions src/3D/SEMesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ typedef shared_array<float> SEUVNativeArrayPtr;

typedef shared_ptr<btTriangleMesh> btTriangleMeshPtr;
typedef shared_ptr<btConvexHullShape> btConvexHullShapePtr;

typedef shared_ptr<btBoxShape> btBoxShapePtr;

class SEMesh: public SESceneLoaderDelegate
{
Expand All @@ -32,7 +32,7 @@ class SEMesh: public SESceneLoaderDelegate
SENormalNativeArrayPtr mNormalArray;
SEUVNativeArrayPtr mUVArray;

SEVertexGroupArray mVertexGroupArray;
SEVertexGroupArray mVertexGroupArray;

public:
SEMesh(void);
Expand All @@ -56,6 +56,7 @@ class SEMesh: public SESceneLoaderDelegate

void GetTriangleMesh( btTriangleMeshPtr trianlgeShape );
void GetConvexHullShape( );
btBoxShapePtr GetBoxShape( );
};

#endif SEMesh_H
5 changes: 5 additions & 0 deletions src/Objects/SEPhysicObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,9 @@ void SEPhysicObject::Draw()
btRigidBodyPtr SEPhysicObject::rigidBody()
{
return mRigidBody;
}

const SEString& SEPhysicObject::name()
{
return mMesh->name();
}
1 change: 1 addition & 0 deletions src/Objects/SEPhysicObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class SEPhysicObject: public SEObjectInterface
virtual void Draw();
btRigidBodyPtr rigidBody();
SEMeshPtr mesh();
const SEString& name();
};


Expand Down
28 changes: 28 additions & 0 deletions src/Objects/SEPhysicWorld.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,17 @@ void SEPhysicWorld::InitDiscreteDynamicsWorld( btDispatcherPtr dispatcher, btBro
mWorld = btDynamicsWorldPtr( SENewObject<btDiscreteDynamicsWorld>( mDispatcher.get(), mBroadphaseInterface.get(), mConstraintSolver.get(), mCollisionConfiguration.get() ) );
}

void SEPhysicWorld::InitContinuousDynamicsWorld( btDispatcherPtr dispatcher, btBroadphaseInterfacePtr broadphaseInterface, btConstraintSolverPtr constraintSolver, btCollisionConfigurationPtr collisionConfiguration )
{
mCollisionConfiguration = collisionConfiguration;
mBroadphaseInterface = broadphaseInterface;
mDispatcher = dispatcher;
mConstraintSolver = constraintSolver;

mWorld = btDynamicsWorldPtr( SENewObject<btContinuousDynamicsWorld>( mDispatcher.get(), mBroadphaseInterface.get(), mConstraintSolver.get(), mCollisionConfiguration.get() ) );

}

btDynamicsWorldPtr SEPhysicWorld::world()
{
return mWorld;
Expand Down Expand Up @@ -67,4 +78,21 @@ void SEPhysicWorld::RemoveObjects()
}

mPhysicObjectArray.clear();
}

SEPhysicObjectPtr SEPhysicWorld::GetObject(const char* name)
{
SEPhysicObjectArray::iterator start = mPhysicObjectArray.begin();
SEPhysicObjectArray::iterator end = mPhysicObjectArray.end();

while(start != end)
{
if( (*start)->name() == name )
return *start;

++start;
}

SEAssert(false, "Physic object not found");
return SEPhysicObjectPtr();
}
2 changes: 2 additions & 0 deletions src/Objects/SEPhysicWorld.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,15 @@ class SEPhysicWorld

static SEPhysicWorldPtr sharedInstance();
void InitDiscreteDynamicsWorld( btDispatcherPtr dispatcher, btBroadphaseInterfacePtr broadphaseInterface, btConstraintSolverPtr constraintSolver, btCollisionConfigurationPtr collisionConfiguration );
void InitContinuousDynamicsWorld( btDispatcherPtr dispatcher, btBroadphaseInterfacePtr broadphaseInterface, btConstraintSolverPtr constraintSolver, btCollisionConfigurationPtr collisionConfiguration );

btDynamicsWorldPtr world();

void Draw();

void AddObject( SEPhysicObjectPtr object);
void RemoveObjects();
SEPhysicObjectPtr GetObject(const char* name);
};


Expand Down
Binary file modified vs/GLUT_Window_Template.suo
Binary file not shown.
Loading

0 comments on commit abf1d49

Please sign in to comment.