0

都市の建物を表すポリゴン データを含むデータセットを正常に読み込んでいます。したがって、すべてのポリゴンは 1 つの建物を表します。Threejs ではそれらをうまく表現できますが、別々の線を 1 つのジオメトリにマージしようとすると、すべての線が接続されます (すべての頂点が同じコレクションに追加されるため、これが理にかなっている理由は理解できます)。

しかし、これらの別々の建物ポリゴンの線を互いに接続せずに、これらの別々の建物ポリゴンを単一のジオメトリにマージするにはどうすればよいでしょうか?

私が今持っているコード:

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));

data は、建物のすべてのポリゴン データを含む変数です。

4

1 に答える 1

3

解決済み:

            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);
于 2013-05-27T15:44:54.290 に答える