3dsmaxman Napisano 6 Marzec 2005 Napisano 6 Marzec 2005 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ę
VGT Napisano 6 Marzec 2005 Napisano 6 Marzec 2005 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 ;)
3dsmaxman Napisano 7 Marzec 2005 Autor Napisano 7 Marzec 2005 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 :)
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się