Libgdx子弹偏移原点

时间:2014-07-18 12:58:00

标签: libgdx bullet bulletphysics rigid-bodies

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

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

enter image description here

然而,如果我将模型水平的底部放在地面上,就像这样

enter image description here

然后btRigidbody像这样偏移

enter image description here

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

非常感谢。

Spriggsy

1 个答案:

答案 0 :(得分:4)

刚体的中心(原点)与质心相同,因此是物理模拟的重要特性。如果你愿意,你可以使用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 relative 移至此转换。

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

请注意,这仅适用于您使用从支持节点转换的文件格式创建的.g3db.g3dj文件(例如使用fbx-conv)(例如.fbx ,但 .obj

相关问题