Libgdx项目符号偏移原点
我正在使用blender创建我的模型,并将它们加载到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刚体像这样偏移 有没有一个明显的方法可以抵消
Vector3 hescoWallHalfExtents = new Vector3(hescoWall.calculateBoundingBox(bounds).getDimensions()).scl(0.5f);
但是,如果我像这样将模型底部与地面放在同一水平面上
然后B刚体像这样偏移
有没有一个明显的方法可以抵消刚体的高度
非常感谢
Spriggsy刚体的中心(原点)与质心相同,因此是物理模拟的一个重要特性。如果愿意,您可以使用btCompoundShape
来“移动”该中心,但这也会影响物理模拟,因此可能不会给出令人满意的结果
或者,您可以补偿btMotionState
中物理原点和视觉原点的差异。例如,将ModelInstance#transform
设置为提供的worldTransform
乘以包含偏移量的aMatrix4
实例(例如使用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以找出哪里出了问题,直到我找到这个。哇,这帮我解决了所有问题。太多了!