I am working on a project that needs to detect collisions between the player car and procedural generated cars. However, all the car meshes are using Three.js Group and consist of several different meshes like this:
const car = new THREE.Group();
const color = pickRandom(vehicleColors);
const main = new THREE.Mesh(
new THREE.BoxBufferGeometry(60, 30, 15),
new THREE.MeshLambertMaterial({ color })
);
main.position.z = 12;
main.castShadow = true;
main.receiveShadow = true;
car.add(main);
const carFrontTexture = getCarFrontTexture();
carFrontTexture.center = new THREE.Vector2(0.5, 0.5);
carFrontTexture.rotation = Math.PI / 2;
const carBackTexture = getCarFrontTexture();
carBackTexture.center = new THREE.Vector2(0.5, 0.5);
carBackTexture.rotation = Math.PI / 2;
const carRightSideTexture = getCarSideTexture();
const carLeftSideTexture = getCarSideTexture();
carLeftSideTexture.flipY = false;
const cabin = new THREE.Mesh(
new THREE.BoxBufferGeometry(33, 24, 12), [
new THREE.MeshLambertMaterial({ map: carFrontTexture }),
new THREE.MeshLambertMaterial({ map: carBackTexture }),
new THREE.MeshLambertMaterial({ map: carLeftSideTexture }),
new THREE.MeshLambertMaterial({ map: carRightSideTexture }),
new THREE.MeshLambertMaterial({ color: 0xffffff }),
new THREE.MeshLambertMaterial({ color: 0xffffff })
]
);
cabin.position.x = -6;
cabin.position.z = 25.5;
cabin.castShadow = true;
cabin.receiveShadow = true;
car.add(cabin);
const backWheel = Wheel();
backWheel.position.x = -18;
car.add(backWheel);
const frontWheel = Wheel();
frontWheel.position.x = 18;
car.add(frontWheel);
car.scale.set(0.5, 0.5, 0.5);
return car;
Can I use ammo.js collision detection on such complex meshes? If not are there other ways to achieve that? Thank you for your patience.