Napisano 6 Marzec 200520 l mam taki skrypt (pierwszy napisany przez siebie metoda prob i bledow :/) : vert_array = #() #() face_array = #() #() v1 = [0,0,0] [0,0,0] v2 = [1,0,0] [1,0,0] v3 = [1,1,0] [1,1,0] v4 = [0,1,0] [0,1,0] v5 = [0,0,1] [0,0,1] v6 = [1,0,1] [1,0,1] v7 = [1,1,1] [1,1,1] v8 = [0,1,1] [0,1,1] append vert_array v1 #([0,0,0]) append vert_array v2 #([0,0,0], [1,0,0]) append vert_array v3 #([0,0,0], [1,0,0], [1,1,0]) append vert_array v4 #([0,0,0], [1,0,0], [1,1,0], [0,1,0]) append vert_array v5 #([0,0,0], [1,0,0], [1,1,0], [0,1,0], [0,0,1]) append vert_array v6 #([0,0,0], [1,0,0], [1,1,0], [0,1,0], [0,0,1], [1,0,1]) append vert_array v7 #([0,0,0], [1,0,0], [1,1,0], [0,1,0], [0,0,1], [1,0,1], [1,1,1]) append vert_array v8 #([0,0,0], [1,0,0], [1,1,0], [0,1,0], [0,0,1], [1,0,1], [1,1,1], [0,1,1]) append face_array [1,4,3] #([1,4,3]) append face_array [3,2,1] #([1,4,3], [3,2,1]) append face_array [1,2,6] #([1,4,3], [3,2,1], [1,2,6]) append face_array [6,5,1] #([1,4,3], [3,2,1], [1,2,6], [6,5,1]) append face_array [2,3,7] #([1,4,3], [3,2,1], [1,2,6], [6,5,1], [2,3,7]) append face_array [7,6,2] #([1,4,3], [3,2,1], [1,2,6], [6,5,1], [2,3,7], [7,6,2]) append face_array [3,4,8] #([1,4,3], [3,2,1], [1,2,6], [6,5,1], [2,3,7], [7,6,2], [3,4,8]) append face_array [8,7,3] #([1,4,3], [3,2,1], [1,2,6], [6,5,1], [2,3,7], [7,6,2], [3,4,8], [8,7,3]) append face_array [4,1,5] #([1,4,3], [3,2,1], [1,2,6], [6,5,1], [2,3,7], [7,6,2], [3,4,8], [8,7,3], [4,1,5]) append face_array [5,8,4] #([1,4,3], [3,2,1], [1,2,6], [6,5,1], [2,3,7], [7,6,2], [3,4,8], [8,7,3], [4,1,5], [5,8,4]) append face_array [5,6,7] #([1,4,3], [3,2,1], [1,2,6], [6,5,1], [2,3,7], [7,6,2], [3,4,8], [8,7,3], [4,1,5], [5,8,4], [5,6,7]) append face_array [7,8,5] #([1,4,3], [3,2,1], [1,2,6], [6,5,1], [2,3,7], [7,6,2], [3,4,8], [8,7,3], [4,1,5], [5,8,4], [5,6,7], [7,8,5]) m = mesh vertices:vert_array faces:face_array $Editable_Mesh:Object03 @ [0.000000,0.000000,0.000000] no i niestety efekt nie jest w pełni zadowaljący - na dwóch przeciwległych ściankach pojawiają się krawędzie ścianek, jakby nie były połączone: jaki błąd popełniłem w skrypcie? z góry dziękuję
Napisano 6 Marzec 200520 l Napisałem to od nowa po swojemu układając vertexy i face'y, gdyż w ten sposób szybciej mogłem wprowadzić dane których u Ciebie brakuje vert_array = #() face_array = #() append vert_array [0,0,0] append vert_array [0,1,0] append vert_array [1,0,0] append vert_array [1,1,0] append vert_array [0,0,1] append vert_array [0,1,1] append vert_array [1,0,1] append vert_array [1,1,1] append face_array [2,3,1] append face_array [3,2,4] append face_array [5,2,1] append face_array [2,5,6] append face_array [6,4,2] append face_array [4,6,8] append face_array [8,3,4] append face_array [3,8,7] append face_array [7,1,3] append face_array [1,7,5] append face_array [7,6,5] append face_array [6,7,8] sgroup_array = #(1,1,2,2,4,4,8,8,16,16,32,32) nowy = mesh vertices:vert_array faces:face_array for f = 1 to 12 do ( setFaceSmoothGroup nowy f sgroup_array[f] setEdgeVis nowy f 1 false setEdgeVis nowy f 2 true setEdgeVis nowy f 3 true ) update nowy Rzeczy, których u Ciebie brakuje, to te, które odbywają się w pętli 'for' Muszisz jeszcze oprócz tworzenia mesh'a zdefiniować dla każdego face'a smoothing group do jakiej ma należeć: setFaceSmoothGroup nowy f sgroup_array[f] Do których grup sg należy face, definiuje się za pomocą 32-bitowych (tyle jest grup sg) liczb binarnych. Stąd w tablicy kolejne potęgi dwójki. Np. liczba 8 (binarnie 1000) oznacza, że face należy do 4 grupy SG liczba 13 (1101) oznacza, że face należy do grup: 1,3,4 dodatkowo te linie: setEdgeVis nowy f 1 false setEdgeVis nowy f 2 true setEdgeVis nowy f 3 true pozwalają na ukrycie edge, które są na przekątnych poly. Wlaśnie dlatego stworzyłem bryłę po swojemu, gdyż u Ciebie pewnie musiałbym inaczej dobierać, które krawędzie ukrywać, a które nie. Ja się zbytnoi na tym nie znam ale wydaje mi się, że to jest problemem. Jeśli się mylę, lechoo na pewno mnie skoryguje ;) ***EDIT*** Przejrzałem dokładniej Twój schemat tworzenia bryły i jest tam trzymanie się algorytmu podobnie jak u mnie więc cały ten mój wykład ogranicza się do tego, abyś po linii "m = mesh vertices:vert_array faces:face_array" w swoim skrypcie dodał coś takiego: sgroup_array = #(1,1,2,2,4,4,8,8,16,16,32,32) for f = 1 to 12 do ( setFaceSmoothGroup m f sgroup_array[f] setEdgeVis m f 1 true setEdgeVis m f 2 true setEdgeVis m f 3 false ) update m Teraz nadanie grup SG na box'a jeszcze ujdzie, ale w dalszym zastosowaniu staje się nieco uciążliwe? Możesz się oddać w ręce automatu. Zamiast tego, co podałem wyżej, wstaw to: addmodifier m (Smooth autosmooth:true threshold:30) convertToMesh(m) update m parametrem threshold decydujesz, kiedy face'y dostaną te same a kiedy różne grupy SG, po szczegóły już odeślę do help'a bo i tak rozpisałem się tutaj ponad norme ;)
Napisano 7 Marzec 200520 l Autor wielkie dzieki :) juz wszystko dziala i ta druga wersja jest jak narazie dla mnie lepsza - nie ma bledow, bo pierwsza mi tylko czesc siatki wygladzala :)
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto