function ConvexBufferGeometry(points) {
    THREE.BufferGeometry.call(this);

    this.type = 'ConvexBufferGeometry';

    // buffers

    var vertices = [];
    var normals = [];

    // execute QuickHull

    if (THREE.QuickHull === undefined) {
      console.error('THREE.ConvexBufferGeometry: ConvexBufferGeometry relies on THREE.QuickHull');
    }

    var quickHull = new THREE.QuickHull().setFromPoints(points);

    // generate vertices and normals

    var faces = quickHull.faces;

    for (var i = 0; i < faces.length; i++) {
      var face = faces[i];
      var edge = face.edge;

      // we move along a doubly-connected edge list to access all face points (see HalfEdge docs)

      do {
        var point = edge.head().point;

        vertices.push(point.x, point.y, point.z);
        normals.push(face.normal.x, face.normal.y, face.normal.z);

        edge = edge.next;
      } while (edge !== face.edge);
    }

    // build geometry

    this.addAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));
    this.addAttribute('normal', new THREE.Float32BufferAttribute(normals, 3));
  }
function ConvexBufferGeometry(points) {
    THREE.BufferGeometry.call(this);

    this.type = 'ConvexBufferGeometry';

    

    var vertices = [];
    var normals = [];

    

    if (THREE.QuickHull === undefined) {
      console.error('THREE.ConvexBufferGeometry: ConvexBufferGeometry relies on THREE.QuickHull');
    }

    var quickHull = new THREE.QuickHull().setFromPoints(points);

    

    var faces = quickHull.faces;

    for (var i = 0; i < faces.length; i++) {
      var face = faces[i];
      var edge = face.edge;

      

      do {
        var point = edge.head().point;

        vertices.push(point.x, point.y, point.z);
        normals.push(face.normal.x, face.normal.y, face.normal.z);

        edge = edge.next;
      } while (edge !== face.edge);
    }

    

    this.addAttribute('position', new THREE.Float32BufferAttribute(vertices, 3));
    this.addAttribute('normal', new THREE.Float32BufferAttribute(normals, 3));
  }
function ConvexBufferGeometry ( points ) { THREE . BufferGeometry . call ( this ) ; this . type = 'ConvexBufferGeometry' ; // buffers var vertices = [ ] ; var normals = [ ] ; // execute QuickHull if ( THREE . QuickHull === undefined ) { console . error ( 'THREE.ConvexBufferGeometry: ConvexBufferGeometry relies on THREE.QuickHull' ) ; } var quickHull = new THREE . QuickHull ( ) . setFromPoints ( points ) ; // generate vertices and normals var faces = quickHull . faces ; for ( var i = 0 ; i < faces . length ; i ++ ) { var face = faces [ i ] ; var edge = face . edge ; // we move along a doubly-connected edge list to access all face points (see HalfEdge docs) do { var point = edge . head ( ) . point ; vertices . push ( point . x , point . y , point . z ) ; normals . push ( face . normal . x , face . normal . y , face . normal . z ) ; edge = edge . next ; } while ( edge !== face . edge ) ; } // build geometry this . addAttribute ( 'position' , new THREE . Float32BufferAttribute ( vertices , 3 ) ) ; this . addAttribute ( 'normal' , new THREE . Float32BufferAttribute ( normals , 3 ) ) ; }
ConvexBufferGeometry
ConvexBufferGeometry