【问题标题】:Loading a Bullet Physics mesh from a file从文件加载 Bullet Physics 网格
【发布时间】:2011-02-09 23:46:29
【问题描述】:

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

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

【问题讨论】:

标签: c++ 3d bullet bulletphysics


【解决方案1】:

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

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    如果您使用 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() 方法加载子弹刚体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多