2

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

geometry.vertices = [
            new Vector3( 0, 0, 0 ),
            new Vector3( externalSide, 0, 0 ),
            new Vector3( externalSide - deltaLato, 0, depth ),
            new Vector3( deltaLato, 0, depth ),

            new Vector3( 0, this.params.height, 0 ),
            new Vector3( externalSide, this.params.height, 0 ),
            new Vector3( externalSide - deltaLato, this.params.height, depth ),
            new Vector3( deltaLato, this.params.height, depth )
        ];
        geometry.faces = [
            new Face3( 0, 1, 2 ),
            new Face3( 0, 2, 3 ),
            new Face3( 6, 5, 4),
            new Face3( 7, 6, 4),
            new Face3(6, 7, 3),
            new Face3(2, 6, 3),
            new Face3(5, 1, 0),
            new Face3(4, 5, 0),
        ];
for (let i = 0; i < this.segments; i++) {
            variazioneRadiant += radiant;
            verticesResults = this.createvertices(
                originLatoMaggiore, originLatoMinore, variazioneRadiant, externalSide, internalSide, deltaLato, depth
            );
            geometry.vertices.push(...verticesResults.vertici);
            originLatoMaggiore = verticesResults.origineLatoMaggiore;
            originLatoMinore = verticesResults.origineLatoMinore;
            value = 8 * (i + 1);
            geometry.faces.push(
                new Face3(geometry.faces[0].a + value, geometry.faces[0].b + value, geometry.faces[0].c + value),
                new Face3(geometry.faces[1].a + value, geometry.faces[1].b + value, geometry.faces[1].c + value),
                new Face3(geometry.faces[2].a + value, geometry.faces[2].b + value, geometry.faces[2].c + value),
                new Face3(geometry.faces[3].a + value, geometry.faces[3].b + value, geometry.faces[3].c + value),
                new Face3(geometry.faces[4].a + value, geometry.faces[4].b + value, geometry.faces[4].c + value),
                new Face3(geometry.faces[5].a + value, geometry.faces[5].b + value, geometry.faces[5].c + value),
                new Face3(geometry.faces[6].a + value, geometry.faces[6].b + value, geometry.faces[6].c + value),
                new Face3(geometry.faces[7].a + value, geometry.faces[7].b + value, geometry.faces[7].c + value),
            );
        } 

more CODE and created the physic with ammoJS using btConvexHullShape and btCompoundShape

vertices.forEach(vertice => {
            count++;
            myshape.addPoint(new Ammo.btVector3(vertice.x, vertice.y, vertice.z));
            if (count === 8) {
                transform = new Ammo.btTransform();
                transform.setIdentity();
                transform.setOrigin( new Ammo.btVector3( 0, 0, 0 ) );
                shape.addChildShape(transform, myshape);
                myshape = new Ammo.btConvexHullShape();
            }
        });

more cODE, but something went wrong and I don't know how to make it work.

Here is a demo.

https://hollow-cylinder.web.app/home

Anybody can help me?

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);
   shape.addPoint(vec31, true);
   vec32.setX(triangle[1].x);
   vec32.setY(triangle[1].y);
   vec32.setZ(triangle[1].z);
   shape.addPoint(vec31, true);
   vec33.setX(triangle[2].x);
   vec33.setY(triangle[2].y);
   vec33.setZ(triangle[2].z);
   shape.addPoint(vec31, true);
});

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

UPDATE (11/01/2021)

Thanks to yannick form threeJS forum I've resolved this problem.

more info in this thread

Alessandro R.
  • 51
  • 2
  • 5
  • A link to an off-site resource is not sufficient. Please read [Why not upload images of code on SO when asking a question?](https://meta.stackoverflow.com/questions/285551/why-not-upload-images-of-code-on-so-when-asking-a-question). and please read [Discourage screenshots of code and/or errors](https://meta.stackoverflow.com/questions/303812/discourage-screenshots-of-code-and-or-errors). Do not post screenshots of the code. Paste the code. – Rabbid76 Dec 31 '20 at 11:57
  • 1
    Thanks, I added some code in the question – Alessandro R. Jan 01 '21 at 12:48

0 Answers0