Libgdx 子弹偏移原点

Posted

技术标签:

【中文标题】Libgdx 子弹偏移原点【英文标题】:Libgdx bullet offset origin 【发布时间】:2014-09-09 15:04:04 【问题描述】:

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

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

但是,如果我像这样将模型的底部与地面水平放置

然后 btRigidbody 像这样偏移

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

非常感谢。

灵巧的

【问题讨论】:

【参考方案1】:

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

请注意,这仅在您使用从支持节点转换的文件格式(例如.fbx,但 em>.obj)

【讨论】:

我已经阅读您的教程两天了,搜索整个网络以找出问题所在,直到我找到了这个。哇,这为我解决了一切。 Tnx 很多!

以上是关于Libgdx 子弹偏移原点的主要内容,如果未能解决你的问题,请参考以下文章

Libgdx 项目符号显示碰撞对象

LibGDX开发 - Tiled地图 之 图层

libGDX 模块概览

LibGdx 如何从 libgdx 类返回到 androidActivity

开源java游戏框架libgdx专题-01-libgdx介绍

Libgdx 播放/暂停音乐