Spr*_*gsy 2 bullet rigid-bodies bulletphysics libgdx
我正在使用Blender创建我的模型,并将它们加载到Libgdx中,如果我使用如下所示的模型中心中的Origin创建它们,然后使用此代码创建刚体,则一切正常
Vector3 hescoWallHalfExtents = new Vector3(hescoWall.calculateBoundingBox(bounds).getDimensions()).scl(0.5f);
Run Code Online (Sandbox Code Playgroud)

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

然后btRigidbody像这样偏移

有什么明显的方法可以抵消刚体的高度吗?
非常感谢。
斯普里西
刚体的中心(原点)与质心相同,因此对于物理模拟具有重要的性质。btCompoundShape如果愿意,您可以使用“移动”该中心,但这也会影响物理模拟,因此可能不会给您令人满意的结果。
或者,您可以补偿物理起源和视觉起源的差异btMotionState。例如,通过设置ModelInstance#transform提供的worldTransform乘以一个Matrix4包含偏移量的实例(例如,使用Matrix4#translate)。
但是,这可能只是使其变得比所需的更为复杂。您可以说,真正的问题是为什么要相对于身体偏移模型的中心?例如,在第二张图像中,模型的中心似乎与第一张图像中的相同。您只移动了Node,基本上表明您要为ModelInstance#transform成员提供初始值。您可以通过实例化ModelInstance以下内容来实现:
modelInstance = new ModelInstance(model, "coneNode", true);
Run Code Online (Sandbox Code Playgroud)
替换"coneNode"为在建模应用程序中创建的节点名称。last(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)创建的文件(例如使用)时才有效
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |