Prethodno istraživanje ću iskoristiti da napravim skriptu koja će ubačene slike pretvarati u mozaike. Za ovu skriptu je potrebno napraviti 2d array kockica po xy osi kojima će biti dodeljene odgovarajuće boje u odnosu na sliku koja se uvede.
Da bi se napravio 2d array kockica potrebno je napraviti dupli “for”-loop (jer ne postoji komanda u maxscriptu-u koja radi isto što i array… u 3dsmax-u) koji otprilike izgleda ovako:
- for y = 1 to slika.height do –y-loop
- (
- for x = 1 to slika.width do –x-loop
- (
- b = box width:8 length:8 height:2
- b.pos = [x,-y,0]
- b.name = uniquename “Kockica”
- )
- )
Dok dodeljivanje boja po kockicama će se vršiti sledećim parametrima:
a) slika = selectBitMap caption:”Izaberite Bitmap”
-da dobijemo prozor za izbor slike i napravimo varijablu koju već koristimo za for-loop u primeru, mora biti pre oba loop-a!
b) bojaMozaika = getpixels slika [0,y-1] širina_slike
-da uzmemo podatke o svakom pixelu slike, ovo je najbolje staviti unutar y-loop-a
c) b.wirecolor = bojaMozaika[x]
-da dodelimo boje pixela odgovarajućim kockicama, ovo će se nalaziti unutar x-loop-a
E sad, kada bismo ove dve stavke, ovakve kakve jesu, spojili u odgovarajući format maxScript skripte i ubacili sliku malo vece rezolucije (recimo 4000 x 2366)…
…Zakucali bi 3dsmax (možda čak i čitav kompjuter) ili bi nam trebalo sati, dani, meseci da skripta odradi svoj posao. Zašto? Jer će nam delovi skripte (pod 1. , 3. , 6. , b) i c) ) sračunati sve pixele slike i napraviti isto toliko kockica. Za našu sliku (rezolucije 4000 x 2366) to bi značilo da ukupno imamo samo 9464000 pixela i kockica koje naš 3dsmax i kompjuter moraju da obrade (lako) i prikažu na ekranu (nemoguće! ili skoro nemoguće?).
Da bismo ovo iznad izbegli delove skripte pod 1. , 3. i 6. ćemo blago izmeniti koristeći malo matematike i na taj način smanjiti boje i “rezoluciju” kockica
1. for y = 1 to slika.height by 80 do
3. for x = 1 to slika.width by 80 do
6. b.pos = [x*0.125,-y*0.125,0]
(boldovani brojevi su uzeti za trenutni primer slike rezolucije 4000 x 2366)
Za naš primer to znači da smo rezoluciju smanjili na 50 x 29,575 što je približno 1478 pixela, i 6400 puta brže i manje u odnosu prvobitno stanje slike. Ukratko ostavili smo svaki 80-ti pixel u x i y pravcu i tako dobijene pixele približili jedne drugima. Primer kako ovo funkcioniše na slici je za svaki 2 pixel.
Trenutne mane skripte su nemogućnost menjanja parametara van maxscript editor-a,za šta će biti više reči u sledećem postu.