here is a snippet of the code for the btBoxShape that I would like to show as a wireframe for debug purposes. I have created a "top down" view that will be used to simulate a dice roll.
-(void) initializeWorld
Code: Select all
btCollisionShape *dieShape = new btBoxShape(btVector3(1.0, 1.0, 1.0));
btDefaultMotionState *fallMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, 0, 0)));
btScalar mass = 1;
btVector3 fallInertia(0, 0, 0);
dieShape->calculateLocalInertia(mass, fallInertia);
btRigidBody::btRigidBodyConstructionInfo dieRigidBodyCI(mass,fallMotionState,dieShape,fallInertia);
dieRigidBodyCI.m_restitution = 0.1;
dieRigidBody = new btRigidBody(dieRigidBodyCI);
dieRigidBody->setDamping(0.3, 0.8);
dynamicsWorld->addRigidBody(dieRigidBody);
[[CCScheduler sharedScheduler] scheduleSelector:@selector(updatePhysics:) forTarget:self interval:0 paused:NO];
reset = NO;
left = true;
btIDebugDraw* debugDrawer;
Code: Select all
dynamicsWorld->stepSimulation(1/60.f, 10);
dynamicsWorld->setDebugDrawer(debugDrawer);
dynamicsWorld->debugDrawWorld();
btTransform trans;
dieRigidBody->getMotionState()->getWorldTransform(trans);
btVector3 dieRBPos = trans.getOrigin();
float velX = dieRigidBody->getLinearVelocity().x();
float velY = dieRigidBody->getLinearVelocity().y();
float velL = dieRigidBody->getLinearVelocity().length();
if (dieRigidBody->getLinearVelocity().length() > -0.1 && dieRigidBody->getLinearVelocity().length() < 0.1 && !reset) {
LogInfo(@"Linear X is %f, linear Y is %f, linear length is %f", velX, velY, velL);
if(left) {
dieRigidBody->applyImpulse(btVector3(-3,0,4), btVector3(dieRBPos.getX(), dieRBPos.getY(), dieRBPos.getZ()));
left = false;
reset = true;
} else {
dieRigidBody->applyImpulse(btVector3(3,0,4), btVector3(dieRBPos.getX(), dieRBPos.getY(), dieRBPos.getZ()));
left = true;
reset = true;
}
}
}