1

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

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

4

2 回答 2

3

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

例如

        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() 函数从网格顶点计算半径。

希望有帮助。

于 2011-02-16T16:07:22.993 回答
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() 方法加载子弹刚体。

于 2013-11-27T19:12:34.650 回答