2017-01-17 3 views

Antwort

0
 var geo = new THREE.Geometry(); 
    var mat = new THREE.MeshBasicMaterial(); 
    var middlePoint = new THREE.Vector3(); 
    for(var i=0;i<dots.length;i++){ 
     middlePoint.add(dots[i].position) 
     geo.vertices.push(new THREE.Vector3(dots[i].x,dots[i].y,dots[i].z)); 
    } 
    middlePoint.divideScalar(dots.length); 
    geo.vertices.push(middlePoint); 

    for(var i=0;i<dots.length;i++){ 
     middlePoint.add(dots[i].position) 
     if(i >0){ 
      geo.faces.push(new THREE.Face3(geo.vertices.length-1,dots[i],dots[i-1])); 
     } 
    } 

    var mesh = new THREE.Mesh(geo,mat); 
+1

Die Art, wie Sie die Flächen drücken, garantiert nicht, dass die Löcher nicht bedeckt werden. – gaitat

+0

I Bearbeitete den Code in der Antwort: Sie können den Mittelpunkt finden und das Gesicht von der Mitte zu zwei beliebigen Eckpunkten im Polygon erstellen. Es kann immer noch Fälle geben, in denen es nicht perfekt ist, aber in den meisten Fällen wird es funktionieren. – Tlatis

+0

@gaitat Haben Sie eine bessere Lösung? Es wäre auch sehr hilfreich für mich. – Tlatis

1

Das Hauptproblem hier ist, wie man ein 3D-Mesh aus einer Reihe von Punkten erstellt. Mit anderen Worten: Sie müssen herausfinden, welche der Scheitelpunkte verbunden werden sollten, um ein Dreieck zu bilden.

Dies ist eine überraschend komplizierte Sache zu tun (nun, zumindest war ich überrascht) und es gibt Tonnen von wissenschaftlichen Arbeiten, Bibliotheken und so weiter.

In Ihrem Fall ist es jedoch ein bisschen einfacher, da Sie schon ungefähr wissen, wie die Scheitelpunkte verbunden werden sollten. Ich würde Ihnen empfehlen, einen Blick auf die earcut-library oder libtess.js, die beide in der Lage sein sollten, die Triangulationen erstellen, die Sie benötigen.

Sobald Sie das haben, können Sie grob gehen mit @lior-trau's Empfehlung für das Erstellen der Geometrie aus dem Ergebnis.

Verwandte Themen