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

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




但是,如果我像这样将模型的底部放置在地面上



然后btRigidbody这样偏移



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

非常感谢。

斯普里西

最佳答案

刚体的中心(原点)与质心相同,因此对于物理模拟具有重要的性质。如果愿意,您可以使用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文件(例如,使用fbx-conv)时,该文件是通过支持节点转换的文件格式(例如,.fbx,而不是.obj)创建的,

07-26 06:13