Loading a Bullet Physics mesh from a file

2.5k views Asked by At

I'm trying to set up a city environment with Ogre and Bullet, but I'm having trouble figuring out how to load meshes into Bullet. Google shows references to a Collada importer, but that seems to have been removed from the SVN.

The Ogre mesh would be the best thing to import, but I have the .dae and .blend files as well and could use those if possible.

2

There are 2 answers

0
Martin Stone On

I had the same requirement when using Bullet with Irrlicht. I found no solution apart from writing the physics loading code myself. I used an object naming convention in the 3d editor, and when loading a model, I iterated through the sub-objects and constructed a suitable btRigidBody for each tagged object.

E.g.

        if (needsBody) {
            if (prefix == "ball") {
                body = createSphereBody(mesh, density);
            }
            else if (...

Similarly with joints:

            if (parent && parent->body) {
                // add constraint
                ...
                if (prefix == "ball") {
                    // ball/socket joint                    
                    constraint = new btGeneric6DofConstraint(
                            *parent->body, *body, frameInA, frameInB, true);
                }
                else if (...

The createSphereBody() function calculated the radius from the mesh verts.

Hope that helps.

0
sonofrage On

If you're using 3DS Max for modeling, you can use the OgreMax plugin for exporting the scene fro OGRE, and the bullet plugin for 3DS Max to export physics objects. You can load those two sets separately as OGRE nodes and bullet objects, and combine the physics/graphics models based on their names.

This is how I did it in my own game:

Source: https://github.com/SabinT/Wings-Of-Chaos

Demo: http://www.youtube.com/watch?v=eryWgIuqC7I

I stopped working on this a long time ago, but hope this code proves helpful for someone working on Ogre/Bullet. Perhaps someone will glean some useful code out of this.

You'd be interested in the CsGameLevel.cpp file. The Load() method first loads the Ogre scene, then loads the bullet rigidbodies through the LoadStaticGeometry() method.