我正在尝试使用Ogre和Bullet建立一个城市环境,但我无法弄清楚如何将网格加载到Bullet中。 Google会显示对Collada导入程序的引用,但这似乎已从SVN中删除。
Ogre网格将是最好的导入,但我也有.dae和.blend文件,如果可能的话可以使用它们。
答案 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()方法加载子弹刚体。