在libgdx 3D和Bullet引擎中扩展ModelInstance

时间:2014-02-17 11:03:02

标签: 3d libgdx scale bullet

每当我尝试将一个模型的重新调整的ModelInstance(在3ds max中制作)添加到Bullet世界时,我会继续获得相同的模型,而不会修改比例。这是我目前的代码:

Objeto objmat = mapaactu.nameAndPutObjetos(obj.getMaterias().get(0).nombreasoci,(int)obj.getMaterias().get(0).cantidad);
world.addConstructor(objmat.nombreinterno, objmat.constructor);

Vector3 objmatpos = new Vector3(obj.entidadbody.getWorldTransform().getTranslation(Vector3.Zero));
Vector3 scala = new Vector3(obj.getMaterias().get(0).cantidad / 100f, obj.getMaterias().get(0).cantidad / 100f, obj.getMaterias().get(0).cantidad / 100f);
Quaternion rotacion = new Quaternion();
objmat.instancia.transform.getRotation(rotacion);

objmat.instancia.transform.set(objmatpos, rotacion, scala);

objmat.setEntidad(world.add(objmat.nombreinterno, objmat.instancia.transform));

然而,我得到的变换的位置分量总是正确的(它产生“obj”的地方)! 我调试了它,“scala”=(0.5f,0.5f,0.5f) 在将模型添加到Bullet世界之前,我该怎么做才能正确缩放模型?

1 个答案:

答案 0 :(得分:4)

虽然这取决于身体的类型,但一般应避免缩放和物理。通常缩放一个体确实会改变它的体积,因此会影响它的物理特性。因此,正确的答案是“烘焙”建模应用程序中的缩放(取决于应用程序,它可能被称为“冻结转换”或类似)或在创建btCollisionShape时考虑缩放(例如,乘以在创建btBoxShape时使用缩放的半个范围。

话虽如此,可以缩放碰撞形状。例如,btCompoundShape有一个名为setLocalScaling的方法,可以将比例应用于其子形状。另见:http://www.continuousphysics.com/Bullet/BulletFull/classbtCompoundShape.html#a1059971dd35c0b5dc2b4d5db070b9fb0

请注意,如果您使用内置方法从模型(https://github.com/libgdx/libgdx/blob/master/extensions/gdx-bullet/src/com/badlogic/gdx/physics/bullet/Bullet.java#L124)创建静态形状,则将忽略缩放组件。

另请注意,运动状态使用的矩阵中的缩放组件将被忽略。另见:https://github.com/libgdx/libgdx/wiki/Bullet-physics#wiki-common-classes