# Problem to add physic in a hollow cylinder (threeJS, AmmoJS)

Hi all,

I’m pretty new to threeJs and AmmoJs world and I don’t know if I’m moving totally wrong or I miss something.

I created a hollow cylinder with threeJs using custom shape CODE and created the physic with ammoJS using btConvexHullShape and btCompoundShape CODE, but something went wrong and I don’t know how to make it work.

Here is a demo.

Anybody can help me?

/cc

Yes, I wrote the same question on stackoverflow to have more chance to have an answer. Thanks.

UPDATE (05/01/2021)

I update the ammoJS code part like this

``````const vec31 = new Ammo.btVector3(0, 0, 0);
const vec32 = new Ammo.btVector3(0, 0, 0);
const vec33 = new Ammo.btVector3(0, 0, 0);
const vertices = geometry.vertices;
geometry.faces.forEach(face => {
triangles.push([
{ x: vertices[face.a].x, y: vertices[face.a].y, z: vertices[face.a].z },
{ x: vertices[face.b].x, y: vertices[face.b].y, z: vertices[face.b].z },
{ x: vertices[face.c].x, y: vertices[face.c].y, z: vertices[face.c].z }
]);
});

const shape = new Ammo.btConvexHullShape();
triangles.forEach(triangle => {
vec31.setX(triangle[0].x);
vec31.setY(triangle[0].y);
vec31.setZ(triangle[0].z);
vec32.setX(triangle[1].x);
vec32.setY(triangle[1].y);
vec32.setZ(triangle[1].z);
vec33.setX(triangle[2].x);
vec33.setY(triangle[2].y);
vec33.setZ(triangle[2].z);
});
``````

I found this code from this question, but this solution does not seem to work well, the cylinders fall to one side without standing.

I tried to implement the hollow cylinder using enable3d (ammo.js).

It did work but has a strange offset (see the example’s source).

But there is an even easier way to add a hollow cylinder with physics. I have added it to the example above. Hope it helps

``````const extrudeSettings = {
depth: 2,
steps: 1,
bevelEnabled: false,
curveSegments: 8
}

const arcShape = new THREE.Shape()
arcShape.absarc(0, 0, 4, 0, Math.PI * 2, 0, false)

const holePath = new THREE.Path()
holePath.absarc(0, 0, 3.5, 0, Math.PI * 2, true)
arcShape.holes.push(holePath)

const geo = new THREE.ExtrudeBufferGeometry(arcShape, extrudeSettings)
const mat = new THREE.MeshBasicMaterial({ color: 'khaki' })
const mesh = new THREE.Mesh(geo, mat)
geo.translate(0, 0, -1) // somehow this has an offset as well :/
mesh.rotateX(Math.PI / 2)
mesh.position.y = 15
``````