Libgdx项目符号偏移原点

Libgdx项目符号偏移原点,libgdx,bullet,bulletphysics,rigid-bodies,Libgdx,Bullet,Bulletphysics,Rigid Bodies,我正在使用blender创建我的模型,并将它们加载到Libgdx中,如果我创建它们时将原点放在模型的中心,如下图所示,然后使用此代码创建刚体,则一切正常 Vector3 hescoWallHalfExtents = new Vector3(hescoWall.calculateBoundingBox(bounds).getDimensions()).scl(0.5f); 但是,如果我像这样将模型底部与地面放在同一水平面上 然后B刚体像这样偏移 有没有一个明显的方法可以抵消

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

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

但是,如果我像这样将模型底部与地面放在同一水平面上

然后B刚体像这样偏移

有没有一个明显的方法可以抵消刚体的高度

非常感谢

Spriggsy

刚体的中心(原点)与质心相同,因此是物理模拟的一个重要特性。如果愿意,您可以使用
btCompoundShape
来“移动”该中心,但这也会影响物理模拟,因此可能不会给出令人满意的结果

或者,您可以补偿
btMotionState
中物理原点和视觉原点的差异。例如,将
ModelInstance#transform
设置为提供的
worldTransform
乘以包含偏移量的a
Matrix4
实例(例如使用
Matrix4#translate

然而,这可能只是让它变得比需要的更复杂。你可以说,真正的问题是,为什么要偏移模型的中心,而不是身体?例如,在第二个图像中,模型的中心似乎与第一个图像中的中心相同。您只移动了
节点
,基本上表明您希望为
ModelInstance#transform
成员提供初始值。您可以通过如下实例化
ModelInstance
来实现这一点:

modelInstance = new ModelInstance(model, "coneNode", true);
用在建模应用程序中创建的节点名称替换
“coneNode”
。最后一个(
true
)参数告诉ModelInstance将其
transform
成员设置为您在建模应用程序中给定的转换。如果需要,您可以调用
modelInstance.transform.translate(x,y,z)
模型实例.transform.trn(x,y,z)
相对于此转换移动modelInstance

有关这一点的更深入解释,请参见:


请注意,只有当您使用的是
.g3db
.g3dj
文件(例如使用
fbx-conv
)时,这才有效。这些文件是从支持节点转换的文件格式创建的(例如
.fbx
,但不是
.obj

我已经阅读了您的教程两天了,正在搜索整个web以找出哪里出了问题,直到我找到这个。哇,这帮我解决了所有问题。太多了!