Thickness of lines using THREE.LineBasicMaterial

后端 未结 8 1619
小鲜肉
小鲜肉 2020-11-27 06:53

I am using the code below to create hundreds of lines in my three.js scene

edgeGeometry[i] = new THREE.Geometry();
edgeGeometry[i].vertices[0] = v(x1,y1,z1);         


        
8条回答
  •  独厮守ぢ
    2020-11-27 07:16

    You can achieve the same effect using extrude-polyline to generate a simplicial complex for the thickened (poly)line and three-simplicial-complex to convert this to a three.js Mesh:

    const THREE = require('three');
    const extrudePolyline = require('extrude-polyline');
    const Complex = require('three-simplicial-complex')(THREE);
    
    function thickPolyline(points, lineWidth) {
      const simplicialComplex = extrudePolyline({
        // Adjust to taste!
        thickness: lineWidth,
        cap: 'square',  // or 'butt'
        join: 'bevel',  // or 'miter',
        miterLimit: 10,
      }).build(points);
    
      // Add a z-coordinate.
      for (const position of simplicialComplex.positions) {
        position[2] = 0;
      }
    
      return Complex(simplicialComplex);
    }
    
    const vertices = [[0, 0], [10, 0], [10, 10], [20, 10], [30, 00]];
    const geometry = thickPolyline(vertices, 10);
    
    const material = new THREE.MeshBasicMaterial({
      color: 0x009900,
      side: THREE.DoubleSide
    });
    const mesh = new THREE.Mesh(geometry, material);
    scene.add(mesh);
    

    Here's a complete example along with the source. (There's currently an issue on requirebin that prevents it from rendering the source example).

    If you want to texture map the polyline, things get a little more complicated.

提交回复
热议问题