我正在使用blender来创建我的模型,并将它们加载到Libgdx中,如果我使用Origin在模型中心创建它们,如下所示,然后使用此代码创建刚体,一切正常
Vector3 hescoWallHalfExtents = new Vector3(hescoWall.calculateBoundingBox(bounds).getDimensions()).scl(0.5f);
然而,如果我将模型水平的底部放在地面上,就像这样
然后btRigidbody像这样偏移
有一种明显的方法可以抵消刚体的高度吗?
非常感谢。Spriggsy
答案 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
)