【问题标题】:Scaling a ModelInstance in libgdx 3D and Bullet engine在 libgdx 3D 和 Bullet 引擎中缩放 ModelInstance
【发布时间】:2014-02-17 11:03:01
【问题描述】:

每次我尝试将模型的调整大小的 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 世界之前,我应该如何正确缩放模型?

【问题讨论】:

    标签: 3d libgdx scale bullet


    【解决方案1】:

    虽然它取决于物体的类型,但通常应避免缩放和物理。通常缩放一个物体确实会改变它的体积,因此会影响它的物理特性。因此,正确的答案是在您的建模应用程序中“烘焙”缩放(取决于应用程序,它可能被称为“冻结转换”或类似名称)或在创建 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

    【讨论】:

    • 感谢您的回答,Xoppa,但我正在尝试在将它们作为动态对象添加到 Bullet 世界之前调整游戏中模型的大小(创建几个模型实例),所以显然没有缩放它们的问题,不是吗?但是,我做不到。
    • 可以使用instance.transform.scale(x, y, z); 缩放模型实例,无论模型实例是否是物理实体的可视化表示。当然,如果您更新 MotionState 中的变换矩阵,则必须重新应用比例。您可以通过缩放根节点来避免这种情况(假设您有一个根节点):instance.nodes.get(0).scale.set(x, y, z); instance.calculateTransforms();
    • 好的,按照您在上一条评论中所说的操作,效果很好。在将 BulletEntity.modelInstance 添加到 Bullet 世界后,您只需将该比例应用于 BulletEntity.modelInstance 的根节点。如何将评论设置为接受的答案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多