3

我正在使用搅拌机创建我的模型,并将它们加载到 Libgdx 中,如果我在模型中心创建它们,如下所示,然后使用此代码创建刚体,一切正常

        Vector3 hescoWallHalfExtents = new Vector3(hescoWall.calculateBoundingBox(bounds).getDimensions()).scl(0.5f);

在此处输入图像描述

但是,如果我像这样将模型的底部与地面齐平

在此处输入图像描述

然后 btRigidbody 像这样偏移

在此处输入图像描述

有没有一种明显的方法可以抵消刚体的高度?

非常感谢。

灵巧的

4

1 回答 1

6

刚体的中心(原点)与质心相同,因此是物理模拟的重要属性。如果你愿意,你可以使用 a“移动”这个中心btCompoundShape,但这也会影响物理模拟,因此可能不会给你满意的结果。

或者,您可以补偿btMotionState. 例如,通过设置ModelInstance#transform提供的worldTransform乘以Matrix4包含偏移量的实例(Matrix4#translate例如使用)。

然而,这可能只是让它变得比它需要的更复杂。你可以说,真正的问题是为什么你要偏移模型的中心与身体相比?例如,在您的第二张图像中,模型的中心看起来与第一张图像中的相同。您只移动了Node,基本上表明您要为ModelInstance#transform成员提供初始值。ModelInstance您可以通过如下实例化来实现这一点:

modelInstance = new ModelInstance(model, "coneNode", true);

替换"coneNode"为在建模应用程序中创建的节点名称。最后一个 ( true) 参数告诉 ModelInstance 将其transform成员设置为您在建模应用程序中给它的转换。如果需要,您可以调用modelInstance.transform.translate(x, y, z);相对modelInstance.transform.trn(x, y, z);于此转换移动 modelInstance 。

可以在这里找到更深入的解释:http: //blog.xoppa.com/loading-a-scene-with-libgdx/

请注意,这仅在您使用.g3db或从支持节点转换的文件格式(例如,但支持)创建的.g3dj 文件(例如 using )时才有效fbx-conv.fbx .obj

于 2014-07-18T15:35:40.603 回答