mirror of
https://github.com/bulletphysics/bullet3
synced 2025-01-07 08:10:08 +00:00
prettify the SoftDemo a little bit, and use 1024x768 for ForkLiftDemo and SoftDemo.
This commit is contained in:
parent
7dfba03032
commit
d6cbc28b94
@ -13,6 +13,6 @@ int main(int argc,char** argv)
|
||||
pForkLiftDemo->initPhysics();
|
||||
pForkLiftDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer);
|
||||
|
||||
return glutmain(argc, argv,640,480,"Bullet ForkLift Demo. http://www.continuousphysics.com/Bullet/phpBB2/", pForkLiftDemo);
|
||||
return glutmain(argc, argv,1024,768,"Bullet ForkLift Demo. http://www.continuousphysics.com/Bullet/phpBB2/", pForkLiftDemo);
|
||||
}
|
||||
|
||||
|
@ -33,13 +33,15 @@ subject to the following restrictions:
|
||||
|
||||
#include "SoftDemo.h"
|
||||
#include "GL_ShapeDrawer.h"
|
||||
|
||||
#include "GLDebugFont.h"
|
||||
#include "GlutStuff.h"
|
||||
|
||||
extern float eye[3];
|
||||
extern int glutScreenWidth;
|
||||
extern int glutScreenHeight;
|
||||
|
||||
static bool sDemoMode = true;
|
||||
|
||||
const int maxProxies = 32766;
|
||||
const int maxOverlap = 65535;
|
||||
|
||||
@ -134,95 +136,6 @@ void pickingPreTickCallback (btDynamicsWorld *world, btScalar timeStep)
|
||||
}
|
||||
|
||||
|
||||
void SoftDemo::clientMoveAndDisplay()
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
|
||||
|
||||
|
||||
|
||||
|
||||
float ms = getDeltaTimeMicroseconds();
|
||||
float dt = ms / 1000000.f;//1.0/60.;
|
||||
|
||||
|
||||
|
||||
if (m_dynamicsWorld)
|
||||
{
|
||||
|
||||
|
||||
|
||||
//#define FIXED_STEP
|
||||
#ifdef FIXED_STEP
|
||||
m_dynamicsWorld->stepSimulation(dt=1.0f/60.f,0);
|
||||
|
||||
#else
|
||||
//during idle mode, just run 1 simulation step maximum, otherwise 4 at max
|
||||
int maxSimSubSteps = m_idle ? 1 : 4;
|
||||
//if (m_idle)
|
||||
// dt = 1.0/420.f;
|
||||
|
||||
int numSimSteps;
|
||||
numSimSteps = m_dynamicsWorld->stepSimulation(dt);
|
||||
//numSimSteps = m_dynamicsWorld->stepSimulation(dt,10,1./240.f);
|
||||
|
||||
#ifdef VERBOSE_TIMESTEPPING_CONSOLEOUTPUT
|
||||
if (!numSimSteps)
|
||||
printf("Interpolated transforms\n");
|
||||
else
|
||||
{
|
||||
if (numSimSteps > maxSimSubSteps)
|
||||
{
|
||||
//detect dropping frames
|
||||
printf("Dropped (%i) simulation steps out of %i\n",numSimSteps - maxSimSubSteps,numSimSteps);
|
||||
} else
|
||||
{
|
||||
printf("Simulated (%i) steps\n",numSimSteps);
|
||||
}
|
||||
}
|
||||
#endif //VERBOSE_TIMESTEPPING_CONSOLEOUTPUT
|
||||
|
||||
#endif
|
||||
|
||||
if(m_drag)
|
||||
{
|
||||
m_node->m_v*=0;
|
||||
}
|
||||
|
||||
m_softBodyWorldInfo.m_sparsesdf.GarbageCollect();
|
||||
|
||||
//optional but useful: debug drawing
|
||||
|
||||
}
|
||||
|
||||
#ifdef USE_QUICKPROF
|
||||
btProfiler::beginBlock("render");
|
||||
#endif //USE_QUICKPROF
|
||||
|
||||
renderme();
|
||||
|
||||
//render the graphics objects, with center of mass shift
|
||||
|
||||
updateCamera();
|
||||
|
||||
|
||||
|
||||
#ifdef USE_QUICKPROF
|
||||
btProfiler::endBlock("render");
|
||||
#endif
|
||||
glFlush();
|
||||
//some additional debugging info
|
||||
#ifdef PRINT_CONTACT_STATISTICS
|
||||
printf("num manifolds: %i\n",gNumManifold);
|
||||
printf("num gOverlappingPairs: %i\n",gOverlappingPairs);
|
||||
|
||||
#endif //PRINT_CONTACT_STATISTICS
|
||||
|
||||
|
||||
swapBuffers();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SoftDemo::displayCallback(void) {
|
||||
|
||||
@ -643,6 +556,7 @@ static void Init_Aero(SoftDemo* pdemo)
|
||||
|
||||
}
|
||||
pdemo->m_autocam=true;
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
@ -681,6 +595,7 @@ static void Init_Pressure(SoftDemo* pdemo)
|
||||
Ctor_BigPlate(pdemo);
|
||||
Ctor_LinearStair(pdemo,btVector3(0,0,0),btVector3(2,1,5),0,10);
|
||||
pdemo->m_autocam=true;
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
@ -701,6 +616,7 @@ static void Init_Volume(SoftDemo* pdemo)
|
||||
Ctor_BigPlate(pdemo);
|
||||
Ctor_LinearStair(pdemo,btVector3(0,0,0),btVector3(2,1,5),0,10);
|
||||
pdemo->m_autocam=true;
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
@ -1206,6 +1122,7 @@ static void Init_ClusterCar(SoftDemo* pdemo)
|
||||
Ctor_LinearStair(pdemo,btVector3(0,-8,0),btVector3(3,2,40),0,20);
|
||||
Ctor_RbUpStack(pdemo,50);
|
||||
pdemo->m_autocam=true;
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
@ -1242,6 +1159,7 @@ static void Init_ClusterRobot(SoftDemo* pdemo)
|
||||
btRigidBody* pgrn=pdemo->localCreateRigidBody(0,btTransform(btQuaternion(0,-SIMD_HALF_PI/2,0),btVector3(0,0,0)),pbox);
|
||||
|
||||
pdemo->m_autocam=true;
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
@ -1336,7 +1254,42 @@ static void Init_TetraCube(SoftDemo* pdemo)
|
||||
|
||||
|
||||
|
||||
unsigned current_demo=28;//19;
|
||||
unsigned current_demo=19;
|
||||
|
||||
/* Init */
|
||||
void (*demofncs[])(SoftDemo*)=
|
||||
{
|
||||
Init_Cloth,
|
||||
Init_Pressure,
|
||||
Init_Volume,
|
||||
Init_Ropes,
|
||||
Init_RopeAttach,
|
||||
Init_ClothAttach,
|
||||
Init_Sticks,
|
||||
Init_Collide,
|
||||
Init_Collide2,
|
||||
Init_Collide3,
|
||||
Init_Impact,
|
||||
Init_Aero,
|
||||
Init_Friction,
|
||||
Init_Torus,
|
||||
Init_TorusMatch,
|
||||
Init_Bunny,
|
||||
Init_BunnyMatch,
|
||||
Init_Cutting1,
|
||||
Init_ClusterDeform,
|
||||
Init_ClusterCollide1,
|
||||
Init_ClusterCollide2,
|
||||
Init_ClusterSocket,
|
||||
Init_ClusterHinge,
|
||||
Init_ClusterCombine,
|
||||
Init_ClusterCar,
|
||||
Init_ClusterRobot,
|
||||
Init_ClusterStackSoft,
|
||||
Init_ClusterStackMixed,
|
||||
Init_TetraCube,
|
||||
Init_TetraBunny,
|
||||
};
|
||||
|
||||
void SoftDemo::clientResetScene()
|
||||
{
|
||||
@ -1376,40 +1329,7 @@ void SoftDemo::clientResetScene()
|
||||
}
|
||||
|
||||
m_softBodyWorldInfo.m_sparsesdf.Reset();
|
||||
/* Init */
|
||||
void (*demofncs[])(SoftDemo*)=
|
||||
{
|
||||
Init_Cloth,
|
||||
Init_Pressure,
|
||||
Init_Volume,
|
||||
Init_Ropes,
|
||||
Init_RopeAttach,
|
||||
Init_ClothAttach,
|
||||
Init_Sticks,
|
||||
Init_Collide,
|
||||
Init_Collide2,
|
||||
Init_Collide3,
|
||||
Init_Impact,
|
||||
Init_Aero,
|
||||
Init_Friction,
|
||||
Init_Torus,
|
||||
Init_TorusMatch,
|
||||
Init_Bunny,
|
||||
Init_BunnyMatch,
|
||||
Init_Cutting1,
|
||||
Init_ClusterDeform,
|
||||
Init_ClusterCollide1,
|
||||
Init_ClusterCollide2,
|
||||
Init_ClusterSocket,
|
||||
Init_ClusterHinge,
|
||||
Init_ClusterCombine,
|
||||
Init_ClusterCar,
|
||||
Init_ClusterRobot,
|
||||
Init_ClusterStackSoft,
|
||||
Init_ClusterStackMixed,
|
||||
Init_TetraCube,
|
||||
Init_TetraBunny,
|
||||
};
|
||||
|
||||
current_demo=current_demo%(sizeof(demofncs)/sizeof(demofncs[0]));
|
||||
|
||||
|
||||
@ -1450,6 +1370,110 @@ void SoftDemo::clientResetScene()
|
||||
demofncs[current_demo](this);
|
||||
}
|
||||
|
||||
|
||||
void SoftDemo::clientMoveAndDisplay()
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
|
||||
|
||||
|
||||
|
||||
|
||||
float ms = getDeltaTimeMicroseconds();
|
||||
float dt = ms / 1000000.f;//1.0/60.;
|
||||
|
||||
|
||||
|
||||
if (m_dynamicsWorld)
|
||||
{
|
||||
|
||||
if (sDemoMode)
|
||||
{
|
||||
static int demoCounter = 500;
|
||||
demoCounter--;
|
||||
if (demoCounter<0)
|
||||
{
|
||||
|
||||
demoCounter=500;
|
||||
current_demo++;
|
||||
current_demo=current_demo%(sizeof(demofncs)/sizeof(demofncs[0]));
|
||||
clientResetScene();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//#define FIXED_STEP
|
||||
#ifdef FIXED_STEP
|
||||
m_dynamicsWorld->stepSimulation(dt=1.0f/60.f,0);
|
||||
|
||||
#else
|
||||
//during idle mode, just run 1 simulation step maximum, otherwise 4 at max
|
||||
int maxSimSubSteps = m_idle ? 1 : 4;
|
||||
//if (m_idle)
|
||||
// dt = 1.0/420.f;
|
||||
|
||||
int numSimSteps;
|
||||
numSimSteps = m_dynamicsWorld->stepSimulation(dt);
|
||||
//numSimSteps = m_dynamicsWorld->stepSimulation(dt,10,1./240.f);
|
||||
|
||||
#ifdef VERBOSE_TIMESTEPPING_CONSOLEOUTPUT
|
||||
if (!numSimSteps)
|
||||
printf("Interpolated transforms\n");
|
||||
else
|
||||
{
|
||||
if (numSimSteps > maxSimSubSteps)
|
||||
{
|
||||
//detect dropping frames
|
||||
printf("Dropped (%i) simulation steps out of %i\n",numSimSteps - maxSimSubSteps,numSimSteps);
|
||||
} else
|
||||
{
|
||||
printf("Simulated (%i) steps\n",numSimSteps);
|
||||
}
|
||||
}
|
||||
#endif //VERBOSE_TIMESTEPPING_CONSOLEOUTPUT
|
||||
|
||||
#endif
|
||||
|
||||
if(m_drag)
|
||||
{
|
||||
m_node->m_v*=0;
|
||||
}
|
||||
|
||||
m_softBodyWorldInfo.m_sparsesdf.GarbageCollect();
|
||||
|
||||
//optional but useful: debug drawing
|
||||
|
||||
}
|
||||
|
||||
#ifdef USE_QUICKPROF
|
||||
btProfiler::beginBlock("render");
|
||||
#endif //USE_QUICKPROF
|
||||
|
||||
renderme();
|
||||
|
||||
//render the graphics objects, with center of mass shift
|
||||
|
||||
updateCamera();
|
||||
|
||||
|
||||
|
||||
#ifdef USE_QUICKPROF
|
||||
btProfiler::endBlock("render");
|
||||
#endif
|
||||
glFlush();
|
||||
//some additional debugging info
|
||||
#ifdef PRINT_CONTACT_STATISTICS
|
||||
printf("num manifolds: %i\n",gNumManifold);
|
||||
printf("num gOverlappingPairs: %i\n",gOverlappingPairs);
|
||||
|
||||
#endif //PRINT_CONTACT_STATISTICS
|
||||
|
||||
|
||||
swapBuffers();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void SoftDemo::renderme()
|
||||
{
|
||||
btIDebugDraw* idraw=m_dynamicsWorld->getDebugDrawer();
|
||||
@ -1570,6 +1594,49 @@ void SoftDemo::renderme()
|
||||
idraw->drawTriangle(o-x*s-y*s,o+x*s+y*s,o-x*s+y*s,c,a);
|
||||
}
|
||||
//
|
||||
|
||||
int lineWidth=280;
|
||||
int xStart = m_glutScreenWidth - lineWidth;
|
||||
int yStart = 20;
|
||||
|
||||
if((getDebugMode() & btIDebugDraw::DBG_NoHelpText)==0)
|
||||
{
|
||||
setOrthographicProjection();
|
||||
glDisable(GL_LIGHTING);
|
||||
glColor3f(0, 0, 0);
|
||||
char buf[124];
|
||||
|
||||
glRasterPos3f(xStart, yStart, 0);
|
||||
if (sDemoMode)
|
||||
{
|
||||
sprintf(buf,"d to toggle demo mode (on)");
|
||||
} else
|
||||
{
|
||||
sprintf(buf,"d to toggle demo mode (off)");
|
||||
}
|
||||
GLDebugDrawString(xStart,20,buf);
|
||||
glRasterPos3f(xStart, yStart, 0);
|
||||
sprintf(buf,"] for next demo (%d)",current_demo);
|
||||
yStart+=20;
|
||||
GLDebugDrawString(xStart,yStart,buf);
|
||||
glRasterPos3f(xStart, yStart, 0);
|
||||
sprintf(buf,"c to visualize clusters");
|
||||
yStart+=20;
|
||||
GLDebugDrawString(xStart,yStart,buf);
|
||||
glRasterPos3f(xStart, yStart, 0);
|
||||
sprintf(buf,"; to toggle camera mode");
|
||||
yStart+=20;
|
||||
GLDebugDrawString(xStart,yStart,buf);
|
||||
glRasterPos3f(xStart, yStart, 0);
|
||||
sprintf(buf,"n,m,l,k for power and steering");
|
||||
yStart+=20;
|
||||
GLDebugDrawString(xStart,yStart,buf);
|
||||
|
||||
|
||||
resetPerspectiveProjection();
|
||||
glEnable(GL_LIGHTING);
|
||||
}
|
||||
|
||||
DemoApplication::renderme();
|
||||
|
||||
}
|
||||
@ -1591,6 +1658,7 @@ void SoftDemo::keyboardCallback(unsigned char key, int x, int y)
|
||||
{
|
||||
switch(key)
|
||||
{
|
||||
case 'd': sDemoMode = !sDemoMode; break;
|
||||
case 'n': motorcontrol.maxtorque=10;motorcontrol.goal+=1;break;
|
||||
case 'm': motorcontrol.maxtorque=10;motorcontrol.goal-=1;break;
|
||||
case 'l': steercontrol_f.angle+=0.1;steercontrol_r.angle+=0.1;break;
|
||||
|
@ -58,6 +58,7 @@ public:
|
||||
btSoftBodyWorldInfo m_softBodyWorldInfo;
|
||||
|
||||
|
||||
|
||||
bool m_autocam;
|
||||
bool m_cutting;
|
||||
bool m_raycast;
|
||||
|
@ -29,7 +29,7 @@ int main(int argc,char** argv)
|
||||
softDemo->getDynamicsWorld()->setDebugDrawer(&gDebugDrawer);
|
||||
|
||||
|
||||
glutmain(argc, argv,640,480,"Bullet Physics Demo. http://bulletphysics.com",softDemo);
|
||||
glutmain(argc, argv,1024,768,"Bullet Physics Demo. http://bulletphysics.com",softDemo);
|
||||
|
||||
delete softDemo;
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user