2013-05-27 33 views
0

我成功加载了一个包含表示城市建筑物的多边形数据的数据集。所以每个多边形代表一个建筑物。在Threejs中,我可以成功地表示它们,但是当我尝试将单独的线合并到一个几何体中时,所有线都连接了(我明白为什么这是有意义的,因为所有顶点都添加到同一个集合中)。如何合并多个行,并在三个空格中填充空格

但是,如何将这些单独的建筑多边形合并为一个单一的几何体,而不需要将单独的建筑多边形的线彼此连接?

的代码,我现在所拥有的:

var geometry = new THREE.Geometry(); 

      for (var i = 0; i < data.length; i++) { 
       var temp = new THREE.Geometry(); 
       var polygon = data[i]; 
       for (var j = 0; j < polygon.length; j++) { 
        temp.vertices.push(new THREE.Vector3(polygon[j][0], polygon[j][1], 0)); 
       } 
       temp.vertices.push(new THREE.Vector3(polygon[0][0], polygon[0][1], 0)); 

       THREE.GeometryUtils.merge(geometry, temp); 
      } 
      scene.add(new THREE.Line(geometry, buildingMaterial, THREE.LineStrip)); 

数据是包含了所有的建筑物多边形数据的变量。

+0

还没有计算出来,但我想我应该与形状,而不是线来工作。 –

+0

形状确实很有用,但我无法将其合并到单个几何体中。 –

回答

2

解决:

  var cube = new THREE.Geometry(); 

      for (var i = 0; i < data.length; i++) { 
       var shape = new THREE.Shape(_.uniq(_.map(data[i], function(d) { return new THREE.Vector3(d[0], d[1], 100); }))); 
       shape.extrude({amount: 100}) 
       var points = shape.createPointsGeometry(); 
       THREE.GeometryUtils.merge(cube, shape.extrude({amount: -1 - Math.random() * 1, bevelSegments: 0, steps: 1 , bevelSegments: 0, bevelSize: 0, bevelThickness: 0})); 

      } 

      var mesh = new THREE.Mesh(cube, new THREE.MeshBasicMaterial({color: 0x333333, wireframe: false})); 
      scene.add(mesh); 
+0

如果你解决了你的问题,你应该接受你自己的答案:) –

+0

我会的,但是这只有在我看到答案后15小时才可能。可能避免错误的解决方案。 –

相关问题