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 类返回到 androidActivity