Tuesday 11 October 2011

Developer Journal 122

I've almost finished the code for making the world bigger over time. I can't believe it took so long. Hopefully introducing gender and pseudo ageing won't take so long.

Damn, damn, damn. I took almost 3 hours to solve a problem.

	

	// create a motion state
	obj->motionState.reset( new btDefaultMotionState( transform ) );

	// create a collision shape
	const btVector3 halfExtents( 0.5f, 0.5f, 0.5f );
	obj->collisionShape.reset( new btBoxShape( halfExtents ) );    

	// create a rigid body
	const float mass = obj->mass;
	btVector3 localInertia( 0.0f, 0.0f, 0.0f );
	// rigidbody is dynamic if is non zero    	
	if( mass != 0.0f ) {
	    obj->collisionShape->calculateLocalInertia( mass, localInertia );
	}
	btRigidBody::btRigidBodyConstructionInfo rbInfo( 
	    mass, obj->motionState.get(), obj->collisionShape.get(), localInertia );
	shared_ptr< agiRigidBody > rigidBody( new agiRigidBody( rbInfo ) );
	rigidBody->Init( obj );
	
	// add to dynamics world
	imp->dynamicsWorld->addRigidBody( rigidBody.get() );

	// set pointer in data object
	obj->rigidBody = rigidBody;

	// scale
	btVector3 bulletScale;
	bulletScale.setX( obj->scale.x() );
	bulletScale.setY( obj->scale.y() );
	bulletScale.setZ( obj->scale.z() );
	rigidBody->getCollisionShape()->setLocalScaling( bulletScale );

I didn't know I had to initialise localInertia. Most vectors I work with default to 0.0.

I was relying on similar code elsewhere and then when I changed over to this code I had to track that error down. Grr. For three hours I had things falling through my ground for no good reason. Yeah, I need to learn more about physics and the physics library I'm using.

No comments:

Post a Comment