Sphere acting like a ball in Bullet Physics

Started by
2 comments, last by Medo Mex 11 years, 5 months ago
I have a sphere and trying to make it act like a ball, so when it move, it should rotate as well like physical ball, and when it hit something, it should bounce, here is the code I am using:
collisionShapes.push_back(colShape);
/// Create Dynamic Objects
btTransform startTransform;
startTransform.setIdentity();
btScalar mass(0.1f);
//rigidbody is dynamic if and only if mass is non zero, otherwise static
bool isDynamic = (mass != 0.f);
btVector3 localInertia(0,0,0);
if (isDynamic)
colShape->calculateLocalInertia(mass,localInertia);
startTransform.setOrigin(btVector3(0.0f,0.0f,0.0f));

//using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects
btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform);
btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,colShape,localInertia);
btRigidBody* body = new btRigidBody(rbInfo);
dynamicsWorld->addRigidBody(body);
}


When I use the above code, the sphere does not rotate when moving (it's moving just like a normal box) neither it bounce when it hit the floor from gravity).

How can I get it to bounce and rotate while moving?
Advertisement
Is your colShape a btSphereShape? Another option is to give it more mass.


It will only roll if it has friction.

Similarly it will only bounce if it has a non-zero restitution.

You can set these things in rbInfo. You'll also need to set them on the environment objects as well, because the resulting behaviour is determined by the combination of restitution & friction. Probably Bullet calculates them by multiplying the properties of the two interaction objects - so for starters, make restitution and friction = 1 on everything, and then modify it until you get the behaviour you want.
Thank you :)

This topic is closed to new replies.

Advertisement