2014-07-18 91 views
1

我使用搅拌器来创建我的模型,并将它们加载到Libgdx中,如果我在下面的模型中心使用Origin创建它们,然后使用此代码创建刚体,所有作品细Libgdx子弹偏移原点

 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

回答

4

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

或者,您可以补偿btMotionState中物理原点和视觉原点的差异。例如,通过将ModelInstance#transform设置为提供的worldTransform乘以包含偏移的a 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

+0

我一直在读你2天的教程现在,搜索整个网络找出了问题,直到我发现这一点。哇,这为我解决了一切。 Tnx很多! –