Próbuję załadować niektóre pliki STL za pomocą pliku Three.js. Modele są poprawnie załadowane, ale jest zbyt wiele trójkątów, które chciałbym scalić/wygładzić.Jak wygładzić trójkąty siatki w załadowanej pamięci STL BufferGeometry
Udało mi się zastosować gładkie tereny do ładowania w innych formatach 3D, ale nie mogę tego zrobić za pomocą BufferGeometry, która wynika z ładowania pliku STL za pomocą STLLoader.
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);
});
To co próbowałem, to zgłasza błąd: Uncaught TypeError: smooth.mergeVertices nie jest funkcją
Gdybym komentować "mergeVertices()" linia, pojawia się inny błąd: Uncaught TypeError: Nie można odczytać właściwości "length" z undefined w SubdivisionsModifier, wiersz 156.
Wygląda na to, że przykładowe kody, które próbuję, są nieaktualne (dzieje się to ostatnio dużo z powodu ogromnych zmian w bibliotece Three.JS). A może coś zapomnę. Faktem jest, że wierzchołki wydają się mieć wartość zerową ...?
Z góry dziękuję!
Proszę ktoś mnie poprawić na to: tak, jeśli chcę po prostu zrobić oczek wygładzić tylko wizualnie, muszę mergeVertices() + computeVertexNormals() przed nałożeniem materiału (lepsza wydajność). Z drugiej strony, SubdivisionsModifiers pozwala modyfikować samą siatkę, dzięki czemu coraz więcej trójkątów wygładza się fizycznie (niska wydajność w dużych modelach). Czy ta koncepcja jest właściwa? – spacorum
Myślę, że musisz zastąpić "obiekt". przez "object.geometry" (razy 4 lokalizacje). (Z tą edycją) twoje rozwiązanie rozwiązało mój problem, próbując uzyskać płynne cieniowanie z pliku źródłowego OBJ, dlatego bardzo dziękuję :-). – steveOw