Java 如何在libgdx中创建btconverxhullshape

Java 如何在libgdx中创建btconverxhullshape,java,3d,libgdx,bulletphysics,Java,3d,Libgdx,Bulletphysics,我想用libgdx为我的游戏创建一个btconverxhullshape。 当我尝试使用github的示例代码执行此操作时: public static btConvexHullShape createConvexHullShape (final Model model, boolean optimize) { final Mesh mesh = model.meshes.get(0); final btConvexHullShape shape = new btConvexHu

我想用libgdx为我的游戏创建一个btconverxhullshape。 当我尝试使用github的示例代码执行此操作时:

public static btConvexHullShape createConvexHullShape (final Model model, boolean optimize) {
    final Mesh mesh = model.meshes.get(0);
    final btConvexHullShape shape = new btConvexHullShape(mesh.getVerticesBuffer(), mesh.getNumVertices(), mesh.getVertexSize());
    if (!optimize) return shape;
    // now optimize the shape
    final btShapeHull hull = new btShapeHull(shape);
    hull.buildHull(shape.getMargin());
    final btConvexHullShape result = new btConvexHullShape(hull);
    // delete the temporary shape
    shape.dispose();
    hull.dispose();
    return result;
}
这不起作用。 我的3D对象只是一个看起来像被拆除的立方体的对象,带有不必要的顶点和线(用debugdrawer测试)

然后我尝试进入数组的第二项,并用

final Mesh mesh = model.meshes.get(1)
这确实给了我3D物体的另一部分,那是保龄球馆的排水沟。但这也被拆除了,而且太小了

最后,我尝试了在网上找到的另外两种方法: 通过Bullet.obtainStaticNodeShape(model.nodes)获取btCollisionShape; 这导致了完美的碰撞形状,但没有检测到碰撞。 另一个问题是,它只适用于静态形状,不打算移动,在我的玩家中有几个需要移动的对象

我做的最后一次可能也是最麻烦的尝试是使用blender导出创建模型的.bullet文件,并将其加载到libgdx中(方法见)

这给了我一个正确的碰撞形状,如果你在blender中设置了正确的重力,即使物体从屏幕的上到下以正确的方式下落。 唯一的问题是一旦检测到碰撞,程序就会崩溃

不幸的是,我不能像在多个论坛中建议的那样使用基本体来近似我的形状。是否有可能通过手动编写从一组顶点创建BTConverXhullShape的方法在libgdx中创建正确的BTConverXhullShape

我感谢你的帮助

编辑: 你是对的,因为小巷本身不需要是动态的。但不幸的是,我用Bullet得到的保龄球道的静态碰撞形状没有检测到保龄球的碰撞(具有球体碰撞形状),所以我想我需要另一种方法来实现这一点,我也想知道,出于教育目的,如何从我输入的任何对象创建BTConverXhullShape

目前我正在尝试加载一个.obj,从中创建一个网格,然后尝试使用创建一个BTConverXhullShape

final btConvexHullShape shape = new btConvexHullShape(mesh.getVerticesBuffer(), mesh.getNumVertices(), mesh.getVertexSize());
目前我认为,我已经接近解决方案了,但我仍然没有正确地理解它,因为我从blender导出的立方体(作为测试对象)没有创建正确的碰撞形状(它看起来又像一个损坏的立方体)


不过,这种方法似乎有效,因为当创建链接中的网格并从中创建BTConverxHullShape时,我得到了正确的碰撞形状

为什么保龄球馆的排水沟必须是动态对象?我编辑了我的帖子,你是对的,这个3d模型不需要动态,但我没有与静态形状发生碰撞。你误解了子弹/凸面外壳的工作原理。如果您的用例是保龄球馆和球,那么您不应该使用凸面外壳形状。您不能仅导出整个场景并期望从中创建形状,场景的每个部分都有自己的形状。如果仍要创建凸面外壳形状并为其创建正确的模型(零件),则可以创建一个,如测试中所示:(注意:这只是一个示例,您必须调整它以适合您的模型)。