Zobacz pełną wersję : problem ze stworzeniem ścianek



3dsmaxman
09-03-05, 16:58
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?

VGT
09-03-05, 22:15
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ę.

3dsmaxman
10-03-05, 05:33
tzn. u mnie 'seg' to zmienna okrslajaca ilosc scianek w podstawie+1, czyli w moim przypadku 13; a dlatego leci w ten sposob, bo podstawa ma byc widoczna od dolu, a nie od gory; jak robie gore, to wszystko jest OK

VGT
10-03-05, 12:37
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.