Ich versuche, einige STL-Dateien mit Three.js zu laden. Die Modelle werden korrekt geladen, aber es gibt zu viele Dreiecke, die ich zusammenfügen/glätten möchte.Wie glätten Mesh Dreiecke in STL geladen BufferGeometry
Ich hatte glattes Laden Terrains in anderen 3D-Formaten erfolgreich angewendet, aber ich kann es nicht mit der BufferGeometry tun, die aus dem Laden einer STL-Datei mit dem STLLoader resultiert.
var material = new THREE.MeshLambertMaterial({ ... });
var path = "./models/budah.stl";
var loader = new THREE.STLLoader();
loader.load(path, function (object) {
object.computeBoundingBox();
object.computeBoundingSphere();
object.computeFaceNormals();
object.computeVertexNormals();
object.normalizeNormals();
object.center();
// Apply smooth
var modifier = new THREE.SubdivisionModifier(1);
var smooth = smooth = object.clone();
smooth.mergeVertices();
smooth.computeFaceNormals();
smooth.computeVertexNormals();
modifier.modify(smooth);
scene.add(smooth);
});
Das ist, was ich versucht, wirft er einen Fehler: Uncaught Typeerror: smooth.mergeVertices ist keine Funktion
Wenn ich die "mergeVertices()" Kommentar Zeile, was ich bekomme ist ein anderer Fehler: Uncaught TypeError: Kann die Eigenschaft 'Länge' von undefined nicht lesen in SubdivisionsModifier, Zeile 156.
Es scheint, dass die Beispielcodes, die ich versuche, veraltet sind (dies passiert in letzter Zeit aufgrund der massiven Änderungen in der Three.JS-Bibliothek sehr häufig). Oder vielleicht vergesse ich etwas. Tatsache ist, dass die Scheitelpunkte Null zu sein scheinen.
Vielen Dank im Voraus!
Bitte jemand mir dies korrigieren: also wenn ich das Netz nur optisch glatt machen zu wollen einfach, ich muss mergeVertices() + computeVertexNormals(), bevor das Material (bessere Leistung) Anwendung. Auf der anderen Seite ermöglicht die SubdivisionsModifiers, das Netz selbst zu modifizieren, mehr und mehr Dreiecke zu machen, um phisisch glatt zu machen (niedrige Leistung auf großen Modellen). Ist dieses Konzept richtig? – spacorum
Ich denke, Sie müssen "Objekt" ersetzen. von "object.geometry" (mal 4 Orte). (Mit dieser Änderung) löste Ihre Lösung mein Problem, eine glatte Schattierung aus einer OBJ-Quelldatei zu bekommen, vielen Dank :-). – steveOw