Code: Select all
btBoxShape* colShape = new btBoxShape(btVector3(1, 1, 1));
btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform);
btRigidBody* bulletRigidBody = new btRigidBody(1.0, myMotionState, colShape);
DynamicWorld->addRigidBody(bulletRigidBody);
Code: Select all
btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration();
DynamicWorld = new btDiscreteDynamicsWorld(new btCollisionDispatcher(collisionConfiguration),
new btDbvtBroadphase(),
new btSequentialImpulseConstraintSolver(),
collisionConfiguration);
DynamicWorld->setGravity(btVector3(0.0,-10.0,0.0));
The second test case increases the upward force by 5.0 to (0.0,15.0,0.0). In order to check velocity and distance travelled I'm using t(time) = (number of steps returned from stepSimulation)*(fixed substep time). My delta time is 0.02 and my fixed substep time is 0.004(1/250). So t = 0.02.
a(acceleration) = F(Force)/m(mass) but since m = 1.0 then a = F. So a = 5.0.
Since the initial velocity is 0, vf(final velocity) = F*t. So vf = 0.1 which is the same as the simulation.
Next d = 0.5*F*t^2. So d = 0.5*(5.0)*(0.02)^2 = 0.001. But when I check the center of mass position of the body after the run it is 0.0012 higher than the starting position. This suggests d = 0.5*(5.0*0.02)*0.024 = 0.5*0.1*0.024 = 0.0012. So the distance is being calculated with the correct velocity (0.1) for the actual current time but the time (0.024) is one substep ahead. I've made numerous additional calls to stepSimulation and this continues to hold true.
Is this a bug or am I missing something?