Imported mesh falls through the ground in BabylonJS

407 Views Asked by At

I'm trying to use physics (AmmoJS) in BabylonJS for an imported mesh. For meshes I create on the fly everything works fine, but when I import a mesh it falls through the ground.

const ground = BABYLON.MeshBuilder.CreateBox("ground",
    { width: 10, height: 1, depth: 10}, scene);
ground.receiveShadows = true;
ground.checkCollisions = true;
ground.physicsImpostor = new BABYLON.PhysicsImpostor(ground , BABYLON.PhysicsImpostor.BoxImpostor, { mass: 0, friction: 0.5, restitution: 0.5 }, scene);

BABYLON.SceneLoader.ImportMesh(["car9"], "models/", "Policecar.glb", scene, function (meshes, particleSystems, skeletons) {
  for (let i in meshes) {
    meshes[i].checkCollisions = true;
  }
  let policecar = meshes[0];
  policecar.physicsImpostor = new BABYLON.PhysicsImpostor(policecar, BABYLON.PhysicsImpostor.MeshImpostor, { mass: 10, friction: 0.5, restitution: 0.5 });
  policecar.position = new BABYLON.Vector3(0, 10, 0);
  policecar.scaling = new BABYLON.Vector3(scale, scale, scale);
});

When I change the restition of the policecar to 0 or 1, it doesn't fall through the ground, but bounces weirdly a few times and falls on it's side. With a BoxImpostor instead of MeshImpostor it falls straight through.

Any ideas?

1

There are 1 best solutions below

0
koji0285 On

You have to consider that .glb-files use right handed system, while BabylonJS uses left handed system. So I would recommend to set BabylonJS to right handed and don't scale by absolute values.

scene.useRightHandedSystem = true;

...

policecar.scaling.scaleInPlace(scale);