Ich frage mich, was wäre der beste Weg, um ein benutzerdefiniertes 3D-Polygon mit einem Array von 3D-Punkten in three.js zu generieren. Es ist ein einfaches Polygon ohne Löcher. Die Punkte sind so geordnet, dass sie benachbarte Ecken repräsentieren. I can do it in 2D, but I don't want the vertices to be coplanar. Vielen Dank für Ihre Hilfe!Wie erstelle ich ein 3D-Polygon aus einer Reihe von 3D-Punkten in three.js?
Antwort
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);
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.
- 1. Wie erstelle ich ein Egg-Mesh in Three.js?
- 2. Wie erstelle ich ein Observable eines Arrays aus einer Reihe von Observablen?
- 3. Wie erstelle ich dieses Sweeps-Nurbs-Modell in Three.js neu?
- 4. Wie erstelle ich eine Reihe von Zufallsnetzwerken in R
- 5. Wie erstelle ich ein DOM aus einer Benutzereingabe in PHP5?
- 6. Wie erstelle ich ein Wörterbuch aus Listen?
- 7. Wie erstelle ich ein Bitset aus Binärzeichenfolge?
- 8. Wie erstelle ich ein Wörterbuch aus einer Textzeile?
- 9. Wie erstelle ich ein komplexes Objekt aus einer Gurken-Tabelle?
- 10. Wie erstelle ich ein Docker-Bild aus einer ISO-Datei?
- 11. Wie erstelle ich ein Rad aus einer Django App?
- 12. Wie erstelle ich ein javax.json.JsonObject aus einer mehrdeutigen hashmap?
- 13. Wie erstelle ich ein Arbeitsblatt aus einer gespeicherten Arbeitsblatt Variable
- 14. Wie erstelle ich ein Makefile aus einer Visual Studio-Lösungsdatei?
- 15. Wie erstelle ich XElement aus einer Zeichenkette?
- 16. Wie erstelle ich ein Projekt aus einer bestehenden Quelle?
- 17. Wie erstelle ich ein Ruby-Date-Objekt aus einer Zeichenfolge?
- 18. Wie erstelle ich ein Dataset aus einer Matrix mit SQL?
- 19. ein Objekt aus einer Reihe von id in Unders Finding
- 20. Erstelle ein Observables Objekt aus einer Liste von Observablen
- 21. Wie erstelle ich ein Dataset in VB.NET aus diesem Code?
- 22. Wie erstelle ich ein Bild von UILabel?
- 23. Wie erstelle ich Getters aus einer JSON-Datei in Pycharm
- 24. Wie erstelle ich ein mp3 aus einem Spektrogramm in Python?
- 25. Wie nehme ich eine Reihe von Bitstrings aus einer Textdatei und lege sie in ein Array?
- 26. Wie erstelle ich ein Raster aus einem Datenrahmen in r?
- 27. Wie erstelle ich ein Dropdown in einer Navigationsleiste (in Android)?
- 28. Wie erstelle ich eine Liste aus einer Textdatei in Python
- 29. Wie erstelle ich ein Array von Doubles aus Zahlen, die in einer Textdatei gespeichert sind?
- 30. Wie erstelle ich eine feste Ellipse und fülle sie in three.js mit einer bestimmten Farbe?
Die Art, wie Sie die Flächen drücken, garantiert nicht, dass die Löcher nicht bedeckt werden. – gaitat
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
@gaitat Haben Sie eine bessere Lösung? Es wäre auch sehr hilfreich für mich. – Tlatis