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

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

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

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

然后 btRigidbody 像这样偏移

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

非常感谢。

灵巧的

【问题讨论】:

    标签: libgdx bullet bulletphysics rigid-bodies


    【解决方案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 很多!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多