代码之家  ›  专栏  ›  技术社区  ›  LosTChG

在libgdx 3D和Bullet引擎中缩放ModelInstance

  •  1
  • LosTChG  · 技术社区  · 11 年前

    每次我尝试将调整大小的模型的ModelInstance(在3ds max中制作)添加到子弹世界时,我都会得到相同的模型,没有修改比例。这是我的当前代码:

    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.5 f) 在将模型添加到子弹世界之前,我应该如何正确缩放模型?

    1 回复  |  直到 11 年前
        1
  •  4
  •   Xoppa    11 年前

    尽管这取决于身体的类型,但一般来说,应避免缩放和物理。按比例缩放物体通常会改变其体积,从而影响其物理财产。因此,正确的答案是在建模应用程序中“烘焙”缩放(取决于应用程序,它可能被称为“冻结变换”或类似),或者在创建 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