Skocz do zawartości

Featured Replies

Napisano

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ę

  • Odpowiedzi 2
  • Wyświetleń 1,8k
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

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
  • 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

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności