从文件加载Bullet Physics网格

时间:2011-02-09 23:46:30

标签: c++ 3d bullet bulletphysics

我正在尝试使用Ogre和Bullet建立一个城市环境,但我无法弄清楚如何将网格加载到Bullet中。 Google会显示对Collada导入程序的引用,但这似乎已从SVN中删除。

Ogre网格将是最好的导入,但我也有.dae和.blend文件,如果可能的话可以使用它们。

2 个答案:

答案 0 :(得分:3)

使用带有Irrlicht的Bullet时,我有同样的要求。除了自己编写物理加载代码之外,我找不到任何解决方案。我在3d编辑器中使用了对象命名约定,在加载模型时,我遍历了子对象并为每个标记对象构造了一个合适的btRigidBody。

E.g。

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

与关节类似:

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

createSphereBody()函数从网格顶点计算半径。

希望有所帮助。

答案 1 :(得分:1)

如果您使用3DS Max进行建模,则可以使用OgreMax插件导出OGRE的场景,使用3DS Max的子弹插件导出物理对象。您可以将这两个集合分别作为OGRE节点和项目符号对象加载,并根据其名称组合物理/图形模型。

这就是我在自己的游戏中做到的方式:

来源:https://github.com/SabinT/Wings-Of-Chaos

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

我很久以前就停止了这项工作,但希望这段代码对于Ogre / Bullet工作的人有用。也许有人会从中收集一些有用的代码。

您对CsGameLevel.cpp文件感兴趣。 Load()方法首先加载Ogre场景,然后通过LoadStaticGeometry()方法加载子弹刚体。