Skocz do zawartości

skrypt tworzacy pudelko - problemy


3dsmaxman

Rekomendowane odpowiedzi

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:

 

boxpc4ui.jpg

boxp02c4hy.jpg

 

jaki błąd popełniłem w skrypcie?

z góry dziękuję

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 2
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Popular Days

Top Posters In This Topic

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 ;)

Odnośnik do komentarza
Udostępnij na innych stronach

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ę



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności