我正在尝试使用 Ogre 和 Bullet 建立一个城市环境,但我无法弄清楚如何将网格加载到 Bullet 中。谷歌显示了对 Collada 进口商的引用,但这似乎已从 SVN 中删除。
Ogre 网格将是最好的导入方式,但我也有 .dae 和 .blend 文件,如果可能的话可以使用它们。
我正在尝试使用 Ogre 和 Bullet 建立一个城市环境,但我无法弄清楚如何将网格加载到 Bullet 中。谷歌显示了对 Collada 进口商的引用,但这似乎已从 SVN 中删除。
Ogre 网格将是最好的导入方式,但我也有 .dae 和 .blend 文件,如果可能的话可以使用它们。
将 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() 函数从网格顶点计算半径。
希望有帮助。
如果您使用 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() 方法加载子弹刚体。