Skocz do zawartości

problem ze stworzeniem ścianek


3dsmaxman

Rekomendowane odpowiedzi

mam taki oto problem w MaxScript:

chce stworzyc skrypt tworzacy walec (w ramach cwiczenia); stworzylem tablice wierzcholkow z wierzcholkami - wszystko jest OK; nastepnie sprobowalem w petli potworzyc podstawe (tu trzeba odwrocic kolejnosc tworzenia scianek, by wszystkow wyszlo), wiec napisalem taki kod:

 

append face_array [1,2,13]

for j = seg to 3 do

append face_array [1,j,j-1]

 

a efekt? - nie udalo mi sie utworzyc scianek (za wyjatkiem pierwszej, poza petla

dopiero gdy robielm to recznie - scianka po sciance udalo mi sie utworzyc podstawe

 

w czym tkwi blad? czy jest to moj blad, czy MaxScripta?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 3
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Top Posters In This Topic

Jak dla mnie trochę za mało informacji, aby stwierdzić, gdzie jest błąd.

Podstawa ma jak widzę 12 segmentów wiec dlaczego petla leci tylko do 3. Nie wiadomo także od jakiej wartosci petla sie zaczyna, gdyz nie ma w tym fragmencie informacji, jaka wartosc przyjmuje zmienna 'seg'.

 

Czy powstaje tylko ta jedna ścianka, czy obiekt wogóle się nie tworzy? Jeśli to drugie, to maxscript listener wywalił błąd, którego odczytanie może coś wyjaśnić.

 

Trzymając się założeń (12 segmentów, co daje 13 vertexów. Nr 1 to środek, nr 2-13 obwód rozmieszczone przeciwnie do ruchu wskazówek zegara) takie coś u mnie zadziałało:

append face_array [1,2,13]
for j = 3 to 13 do
append face_array [1,j,j-1]

A skoro już i tak to napisałem, to tutaj masz cały skrypt na zrobienie podstawy o dowolnym promieniu i ilosci segmentów:

vert_array = #()
face_array = #()
segmenty = 12.0
promien = 10.0

append vert_array [0,0,0]
for i = 1 to segmenty do
(
append vert_array [sin((360/segmenty)*i)*promien,cos((360/segmenty)*i)*promien,0]
)

append face_array [1,segmenty+1,2]
for i = 1 to segmenty-1 do
(
append face_array [1,i+1,i+2]
)
nowy = mesh vertices:vert_array faces:face_array

Może przeanalizowanie tego rozjaśni nieco sytuację.

Odnośnik do komentarza
Udostępnij na innych stronach

Czyli twoja petla ma sie wykonywac od 13 do 3. Zakres ten sam co u mnie, jedynie problem w tym, że sie nie wykonuje. Wpisz sobie w nowym skrypcie raz pierwsza, raz druga instrukcje i zobacz co pokazuje maxscript listener:

 

for i = 3 to 13 do print i

for i = 13 to 3 print i

 

Druga petla sie nie wykona ani razu, gdyż domyślnie krok dla petli for wynosi 1. Wiec pelna wersja tej instrukcji wyglada tak:

 

for i = 13 to 3 by -1 print i

 

Natomiast jeśli chodzi o to, aby face były skierowane do góry, lub do dołu, to nie zależy to od tego jak wykonujesz tą petle, a od tego jak dobierasz vertexy dla scianek:

 

append face_array [1,j,j-1]

append face_array [1,j-1,j]

 

Jedna instrukcja skieruje normalne face'ow w dół, druga w górę, niezależnie od tego jak bedzie leciała petla for.

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