updated demos to show debug display with new AllBulletDemos (AllInOne),

added btDynamicsWorld::getWorldType
This commit is contained in:
ejcoumans
2007-10-25 07:07:12 +00:00
parent 2a75e186ec
commit fd1e672fcb
21 changed files with 133 additions and 21 deletions

View File

@@ -24,6 +24,12 @@
#include "DemoApplication.h" #include "DemoApplication.h"
#include "DemoEntries.h" #include "DemoEntries.h"
#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h"
#include "GLDebugDrawer.h"
static GLDebugDrawer gDebugDrawer;
namespace namespace
{ {
@@ -42,8 +48,13 @@ namespace
float viewX = 0.0f; float viewX = 0.0f;
float viewY = 0.0f; float viewY = 0.0f;
int tx, ty, tw, th; int tx, ty, tw, th;
int gDrawAabb=0;
int gDebugDraw=0;
int gDebugContacts=0;
int gDebugNoDeactivation = 0;
} }
void Resize(int w, int h) void Resize(int w, int h)
{ {
width = w; width = w;
@@ -61,6 +72,18 @@ void Resize(int w, int h)
demo->reshape(w, h); demo->reshape(w, h);
} }
DemoApplication* CreatDemo(btDemoEntry* entry)
{
DemoApplication* demo = entry->createFcn();
btAssert(demo);
if (demo->getDynamicsWorld())
{
demo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer);
}
return demo;
}
/*b2Vec2 ConvertScreenToWorld(int x, int y) /*b2Vec2 ConvertScreenToWorld(int x, int y)
{ {
b2Vec2 p; b2Vec2 p;
@@ -91,6 +114,45 @@ void SimulationLoop()
//test->SetTextLine(30); //test->SetTextLine(30);
//test->Step(&settings); //test->Step(&settings);
//sync debugging options
if (gDrawAabb)
{
demo->setDebugMode(demo->getDebugMode() |btIDebugDraw::DBG_DrawAabb);
} else
{
demo->setDebugMode(demo->getDebugMode() & (~btIDebugDraw::DBG_DrawAabb));
}
if (gDebugDraw)
{
demo->setDebugMode(demo->getDebugMode() |btIDebugDraw::DBG_DrawWireframe);
} else
{
demo->setDebugMode(demo->getDebugMode() & (~btIDebugDraw::DBG_DrawWireframe));
}
if (gDebugContacts)
{
demo->setDebugMode(demo->getDebugMode() |btIDebugDraw::DBG_DrawContactPoints);
} else
{
demo->setDebugMode(demo->getDebugMode() & (~btIDebugDraw::DBG_DrawContactPoints));
}
if (gDebugNoDeactivation)
{
demo->setDebugMode(demo->getDebugMode() |btIDebugDraw::DBG_NoDeactivation);
} else
{
demo->setDebugMode(demo->getDebugMode() & (~btIDebugDraw::DBG_NoDeactivation));
}
if (demo->getDynamicsWorld()->getWorldType() == BT_DISCRETE_DYNAMICS_WORLD)
{
btDiscreteDynamicsWorld* discreteWorld = (btDiscreteDynamicsWorld*) demo->getDynamicsWorld();
discreteWorld->getSolverInfo().m_numIterations = iterationCount;
}
demo->clientMoveAndDisplay(); demo->clientMoveAndDisplay();
@@ -103,7 +165,7 @@ void SimulationLoop()
testIndex = testSelection; testIndex = testSelection;
delete demo; delete demo;
entry = g_demoEntries + testIndex; entry = g_demoEntries + testIndex;
demo = entry->createFcn(); demo = CreatDemo(entry);
viewZoom = 20.0f; viewZoom = 20.0f;
viewX = 0.0f; viewX = 0.0f;
viewY = 0.0f; viewY = 0.0f;
@@ -123,7 +185,7 @@ void Keyboard(unsigned char key, int x, int y)
// Press 'r' to reset. // Press 'r' to reset.
case 'r': case 'r':
delete demo; delete demo;
demo = entry->createFcn(); demo = CreatDemo(entry);
Resize(width,height); Resize(width,height);
break; break;
@@ -170,7 +232,7 @@ int main(int argc, char** argv)
//glutSetOption (GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS); //glutSetOption (GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);
entry = g_demoEntries + testIndex; entry = g_demoEntries + testIndex;
demo = entry->createFcn(); demo = CreatDemo(entry);
glutDisplayFunc(SimulationLoop); glutDisplayFunc(SimulationLoop);
GLUI_Master.set_glutReshapeFunc(Resize); GLUI_Master.set_glutReshapeFunc(Resize);
@@ -193,22 +255,27 @@ int main(int argc, char** argv)
glui->add_spinner("Iterations", GLUI_SPINNER_INT, &iterationCount); glui->add_spinner("Iterations", GLUI_SPINNER_INT, &iterationCount);
iterationSpinner->set_int_limits(1, 100); iterationSpinner->set_int_limits(1, 100);
GLUI_Spinner* hertzSpinner = /* GLUI_Spinner* hertzSpinner =
glui->add_spinner("Hertz", GLUI_SPINNER_FLOAT, &hz); glui->add_spinner("Hertz", GLUI_SPINNER_FLOAT, &hz);
hertzSpinner->set_float_limits(5.0f, 200.0f); hertzSpinner->set_float_limits(5.0f, 200.0f);
*/
// glui->add_checkbox("Position Correction", &settings.enablePositionCorrection); // glui->add_checkbox("Position Correction", &settings.enablePositionCorrection);
// glui->add_checkbox("Warm Starting", &settings.enablePositionCorrection); // glui->add_checkbox("Warm Starting", &settings.enablePositionCorrection);
glui->add_checkbox("DisableDeactivation", &gDebugNoDeactivation);
glui->add_separator(); glui->add_separator();
GLUI_Panel* drawPanel = glui->add_panel("Draw"); GLUI_Panel* drawPanel = glui->add_panel("Draw");
// glui->add_checkbox_to_panel(drawPanel, "AABBs", &settings.drawAABBs);
// glui->add_checkbox_to_panel(drawPanel, "Pairs", &settings.drawPairs); glui->add_checkbox_to_panel(drawPanel, "AABBs", &gDrawAabb);
// glui->add_checkbox_to_panel(drawPanel, "Contacts", &settings.drawContacts); glui->add_checkbox_to_panel(drawPanel, "DebugDrawer", &gDebugDraw);
glui->add_checkbox_to_panel(drawPanel, "Contacts", &gDebugContacts);
// glui->add_checkbox_to_panel(drawPanel, "Impulses", &settings.drawImpulses); // glui->add_checkbox_to_panel(drawPanel, "Impulses", &settings.drawImpulses);
// glui->add_checkbox_to_panel(drawPanel, "Statistics", &settings.drawStats); // glui->add_checkbox_to_panel(drawPanel, "Statistics", &settings.drawStats);
int testCount = 0; int testCount = 0;
btDemoEntry* e = g_demoEntries; btDemoEntry* e = g_demoEntries;
while (e->createFcn) while (e->createFcn)

View File

@@ -121,6 +121,9 @@ void BasicDemo::displayCallback(void) {
void BasicDemo::initPhysics() void BasicDemo::initPhysics()
{ {
setCameraDistance(btScalar(50.));
btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
#ifdef USE_PARALLEL_DISPATCHER #ifdef USE_PARALLEL_DISPATCHER

View File

@@ -23,7 +23,7 @@ int main(int argc,char** argv)
BasicDemo ccdDemo; BasicDemo ccdDemo;
ccdDemo.initPhysics(); ccdDemo.initPhysics();
ccdDemo.setCameraDistance(btScalar(50.));
#ifdef CHECK_MEMORY_LEAKS #ifdef CHECK_MEMORY_LEAKS
ccdDemo.exitPhysics(); ccdDemo.exitPhysics();

View File

@@ -101,6 +101,8 @@ void BspDemo::initPhysics(char* bspfilename)
m_cameraUp = btVector3(0,0,1); m_cameraUp = btVector3(0,0,1);
m_forwardAxis = 1; m_forwardAxis = 1;
setCameraDistance(22.f);
///Setup a Physics Simulation Environment ///Setup a Physics Simulation Environment
btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();

View File

@@ -47,7 +47,7 @@ int main(int argc,char** argv)
// Enrico: TODO: Should change parameter type of initPhysics() to std::string or at least const char * // Enrico: TODO: Should change parameter type of initPhysics() to std::string or at least const char *
bspDemo->initPhysics((char*)bspfilename); bspDemo->initPhysics((char*)bspfilename);
bspDemo->setCameraDistance(22.f);
return glutmain(argc, argv,640,480,"Bullet Quake BSP Physics Viewer http://bullet.sourceforge.net",bspDemo); return glutmain(argc, argv,640,480,"Bullet Quake BSP Physics Viewer http://bullet.sourceforge.net",bspDemo);
} }

View File

@@ -63,6 +63,8 @@ void drawLimit()
void ConstraintDemo::initPhysics() void ConstraintDemo::initPhysics()
{ {
setCameraDistance(26.f);
// btCollisionShape* groundShape = new btBoxShape(btVector3(50,3,50)); // btCollisionShape* groundShape = new btBoxShape(btVector3(50,3,50));
btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration); btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);

View File

@@ -8,7 +8,7 @@ int main(int argc,char** argv)
constraintDemo->initPhysics(); constraintDemo->initPhysics();
constraintDemo->setCameraDistance(26.f);
return glutmain(argc, argv,640,480,"Constraint Demo. http://www.continuousphysics.com/Bullet/phpBB2/",constraintDemo); return glutmain(argc, argv,640,480,"Constraint Demo. http://www.continuousphysics.com/Bullet/phpBB2/",constraintDemo);
} }

View File

@@ -66,6 +66,8 @@ GLDebugDrawer debugDrawer;
void ConvexDecompositionDemo::initPhysics(const char* filename) void ConvexDecompositionDemo::initPhysics(const char* filename)
{ {
setCameraDistance(26.f);
ConvexDecomposition::WavefrontObj wo; ConvexDecomposition::WavefrontObj wo;
tcount = wo.loadObj(filename); tcount = wo.loadObj(filename);

View File

@@ -17,7 +17,7 @@ int main(int argc,char** argv)
convexDecompDemo->clientResetScene(); convexDecompDemo->clientResetScene();
convexDecompDemo->setCameraDistance(26.f);
return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://www.continuousphysics.com/Bullet/phpBB2/",convexDecompDemo); return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://www.continuousphysics.com/Bullet/phpBB2/",convexDecompDemo);
} }

View File

@@ -405,6 +405,9 @@ btCollisionShape * GimpactConcaveDemo::createBunnyShape()
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void GimpactConcaveDemo::initPhysics() void GimpactConcaveDemo::initPhysics()
{ {
setCameraDistance(45.f);
gContactAddedCallback = CustomMaterialCombinerCallback; gContactAddedCallback = CustomMaterialCombinerCallback;

View File

@@ -8,7 +8,6 @@ int main(int argc,char** argv)
GimpactConcaveDemo* concaveDemo = new GimpactConcaveDemo(); /// This will not be Deleted!!! GimpactConcaveDemo* concaveDemo = new GimpactConcaveDemo(); /// This will not be Deleted!!!
concaveDemo->initPhysics(); concaveDemo->initPhysics();
concaveDemo->setCameraDistance(45.f);
return glutmain(argc, argv,640,480,"DevO,s GIMPACT Test Demo",concaveDemo); return glutmain(argc, argv,640,480,"DevO,s GIMPACT Test Demo",concaveDemo);
} }

View File

@@ -60,7 +60,8 @@ void DrawRasterizerLine(float const* , float const*, int)
void LinearConvexCastDemo::initPhysics() void LinearConvexCastDemo::initPhysics()
{ {
setCameraDistance(30.f);
setCameraDistance(50.f);
tr[0].setOrigin(btVector3(0,0,0)); tr[0].setOrigin(btVector3(0,0,0));
tr[1].setOrigin(btVector3(0,10,0)); tr[1].setOrigin(btVector3(0,10,0));

View File

@@ -372,6 +372,14 @@ void DemoApplication::keyboardCallback(unsigned char key, int x, int y)
} }
void DemoApplication::setDebugMode(int mode)
{
m_debugMode = mode;
if (getDynamicsWorld() && getDynamicsWorld()->getDebugDrawer())
getDynamicsWorld()->getDebugDrawer()->setDebugMode(mode);
}
void DemoApplication::specialKeyboardUp(int key, int x, int y) void DemoApplication::specialKeyboardUp(int key, int x, int y)
{ {

View File

@@ -100,10 +100,7 @@ public:
return m_debugMode ; return m_debugMode ;
} }
void setDebugMode(int mode) void setDebugMode(int mode);
{
m_debugMode = mode;
}
void setCameraUp(const btVector3& camUp) void setCameraUp(const btVector3& camUp)

View File

@@ -307,6 +307,8 @@ void RagdollDemo::initPhysics()
{ {
// Setup the basic world // Setup the basic world
setCameraDistance(btScalar(5.));
btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration); btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration);

View File

@@ -7,7 +7,7 @@ int main(int argc,char* argv[])
RagdollDemo demoApp; RagdollDemo demoApp;
demoApp.initPhysics(); demoApp.initPhysics();
demoApp.setCameraDistance(btScalar(10.));
return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bullet.sf.net",&demoApp); return glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bullet.sf.net",&demoApp);
} }

View File

@@ -541,11 +541,13 @@ void VehicleDemo::specialKeyboard(int key, int x, int y)
case GLUT_KEY_UP : case GLUT_KEY_UP :
{ {
gEngineForce = maxEngineForce; gEngineForce = maxEngineForce;
gBreakingForce = 0.f;
break; break;
} }
case GLUT_KEY_DOWN : case GLUT_KEY_DOWN :
{ {
gBreakingForce = maxBreakingForce; gBreakingForce = maxBreakingForce;
gEngineForce = 0.f;
break; break;
} }
default: default:

View File

@@ -36,6 +36,11 @@ class btContinuousDynamicsWorld : public btDiscreteDynamicsWorld
virtual void calculateTimeOfImpacts(btScalar timeStep); virtual void calculateTimeOfImpacts(btScalar timeStep);
virtual btDynamicsWorldType getWorldType() const
{
return BT_CONTINUOUS_DYNAMICS_WORLD;
}
}; };
#endif //BT_CONTINUOUS_DYNAMICS_WORLD_H #endif //BT_CONTINUOUS_DYNAMICS_WORLD_H

View File

@@ -153,6 +153,11 @@ public:
return m_solverInfo; return m_solverInfo;
} }
virtual btDynamicsWorldType getWorldType() const
{
return BT_DISCRETE_DYNAMICS_WORLD;
}
}; };

View File

@@ -22,6 +22,13 @@ class btRaycastVehicle;
class btConstraintSolver; class btConstraintSolver;
enum btDynamicsWorldType
{
BT_SIMPLE_DYNAMICS_WORLD=1,
BT_DISCRETE_DYNAMICS_WORLD=2,
BT_CONTINUOUS_DYNAMICS_WORLD=3
};
///btDynamicsWorld is the baseclass for several dynamics implementation, basic, discrete, parallel, and continuous ///btDynamicsWorld is the baseclass for several dynamics implementation, basic, discrete, parallel, and continuous
class btDynamicsWorld : public btCollisionWorld class btDynamicsWorld : public btCollisionWorld
{ {
@@ -74,6 +81,8 @@ class btDynamicsWorld : public btCollisionWorld
virtual const btTypedConstraint* getConstraint(int index) const { (void)index; return 0; } virtual const btTypedConstraint* getConstraint(int index) const { (void)index; return 0; }
virtual btDynamicsWorldType getWorldType() const=0;
}; };
#endif //BT_DYNAMICS_WORLD_H #endif //BT_DYNAMICS_WORLD_H

View File

@@ -79,6 +79,11 @@ public:
virtual btConstraintSolver* getConstraintSolver(); virtual btConstraintSolver* getConstraintSolver();
virtual btDynamicsWorldType getWorldType() const
{
return BT_SIMPLE_DYNAMICS_WORLD;
}
}; };
#endif //BT_SIMPLE_DYNAMICS_WORLD_H #endif //BT_SIMPLE_DYNAMICS_WORLD_H