Example #1
0
void CBulletWorld::initialize() {
	broadphase = new btDbvtBroadphase();
	collisionConfiguration = new btDefaultCollisionConfiguration();
	dispatcher = new btCollisionDispatcher(collisionConfiguration);
	solver = new btSequentialImpulseConstraintSolver;

	mWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);

	mWorld->setGravity(btVector3(0, -10, 0));

	groundShape = new btStaticPlaneShape(btVector3(0, 1, 0), 1);
	ballShape = new btSphereShape(1);

	groundMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, -1, 0)));
	btRigidBody::btRigidBodyConstructionInfo
		groundRigidBodyCI(0, groundMotionState, groundShape, btVector3(0, 0, 0));
	groundRigidBody = new btRigidBody(groundRigidBodyCI);
	groundRigidBody->setRestitution(1.0);
	mWorld->addRigidBody(groundRigidBody);


	ballMotionState =
		new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, 50, 0)));
	btScalar mass = 1;
	btVector3 ballInertia(0, 0, 0);
	ballShape->calculateLocalInertia(mass, ballInertia);
	btRigidBody::btRigidBodyConstructionInfo ballRigidBodyCI(mass, ballMotionState, ballShape, ballInertia);
	ballRigidBody = new btRigidBody(ballRigidBodyCI);
	ballRigidBody->setRestitution(1.0);
	mWorld->addRigidBody(ballRigidBody);

}
Example #2
0
/**
 * links up the class with bullet
 * note that this cannot be called before renderObject
 */
void Ball::initializeBullet(btDiscreteDynamicsWorld* dynamicsWorld)
{
    if (ballNode == NULL) {
        return;
    }

    ballPosition = ballNode->getPosition();

    btVector3 position(ballPosition.x,
                       ballPosition.y,
                       ballPosition.z);

    ballShape = new btSphereShape(ballRadius);
    ballMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), position));

    btScalar mass = 100;
    //btVector3 ballInertia(0, 0, 0);
    //ballShape->calculateLocalInertia(mass, ballInertia);
    btRigidBody::btRigidBodyConstructionInfo ballRigidBodyCI(mass, ballMotionState, ballShape);
    ballRigidBody = new btRigidBody(ballRigidBodyCI);

    ballRigidBody->setRestitution(1.0f);

    srand(time(NULL));
    btVector3 direction(10.0f * (rand() * 1.0f / RAND_MAX),
                        10.0f * (rand() * 1.0f / RAND_MAX),
                        10.0f * (rand() * 1.0f / RAND_MAX));

    ballRigidBody->setLinearVelocity(direction);

    dynamicsWorld->addRigidBody(ballRigidBody);
}