Jump to content
php.lv forumi

Attēlu ģenerēšana


Lynx

Recommended Posts

Turpinot strādāt pie projekta tika nosecināts, ka ir problēmas ar mākslinieku un pat, ja būtu mākslinieks, ir diezgan laikietilpīgi sazīmēt visus nepieciešamos kartes laukus.

 

Ideja ir sekojoša karte sastāv no 60x60px lauciņiem uz kuriem ir šāda tipa attēls:

 

water.jpgwater_504.jpgland_505.jpg

 

Visi viņi šajā gadijumā savienojas pa horizontālo asi un veido kartes izskatu, bet vispār nepieciešams lai lauciņš normāli savienojas ar visiem laukiem viņam apkārt. Jautājums vai šāda te tipa lauciņjus loģiskā secība, lai nerastos kartes anomālijas ir vispār iespējams ģenerēt? Un ja ir iespējams, kā to vispār dabūt gatavu? Man nav nemazākās nojausmas kā vispār var kautko tādu izveidot.

Šeit var redzēt kā kartei būtu jaizskatās kopumā. Šie lauciņi ir ņemti no 3ās civilizācijas, kas ir ļoti negļiti :/ Un arī katra lauciņa izveidošana ir ļoti ilga un īslaicīgs mūžs, ja nu spēle beidzas un tiek pasludināts uzvarētājs atkal jataisa jauna karte. http://indago.gamez.lv/i2005/img/3_main_final.jpg

Link to comment
Share on other sites

Aptuveni tā jau tiek arī darīts ar bildēm viņas tiek ieliktas tabulā kā šūnu backgrounds un pa virsu laisti kuģu, pilsētu utt attēli, bet problēma ir, ka bilžu nav :)

 

Un ideja bija šīs bildes ģenerēt, nevis prasīt lai mākslinieks atdod galus sazīmējot nepieciešamās 5000 bildes :) Nu skaits gan būs būtiski mazāks, jo attēlus jau var izmantot vairākos laukos vienādus, bet tas nemaina būtību. Tātad jautājums vai patiešām būs jameklē mākslinieks pašnāvnieks, jo aizrunātais mākslinieks izskatās, ka nevēlējās šito visu uzņemties, vai arī ir iespējams šo lauku attēlus saģenerēt ar skriptu? Pēc tam vienkārši viņi visi tiktu salkti vienā folderī updeitota db ar attēlu atrašanās vietu. Un pāris minūtes tiek aizvietots dienām mākslinieka darbs, neskaitot skripta rakstīšanas laiku.

Link to comment
Share on other sites

Es nesaprotu, kur tev ir te problēma? :)

Var taču pielietot z-index, lai kārtotu tos kuģus, u.c. objektus pa virsu

Un tas ka nevajag zīmēt tās kartes, tas taču ir pašsaprotami, jo šādas kartes vienmēr taisa no tailiem - maziem kartes gabaliņiem!

Link to comment
Share on other sites

bubu :) Problēma nav ar kartes attēlošanas algoritmu, tur viss strādā perfekti kā redzams skrēnšotos.

 

Bet gan ir nepieciešams izdomāt algoritmu pēc kā ģenerēt šos 60x60px mazos *.jpg lauciņus. Pēc tiem kritērijiem ko jau v3rb0 nosauca, dažādi reljefi un galvenais lai sakrīt krasta līnijas visiem blakus stāvošajiem lauciņiem un neveidotos dažādas anomālijas šajās 60x60px bildēs, kuras ir uzģenerētas jau spēles sākumā un saglabātas.

Link to comment
Share on other sites

Pēc 2u dienu mocībām esmu panācis manāmu progresu, bet tomēr esmu iesprūdis ar krasta līnijas ģenerēšanu. Nesanāk izdabūt gatavu pilnīgi neko, kas kautcik līdzinātos krasta līnijai. Perlin noise ideju atmetu, jo nesanāca pielāgot php, tā vietā uzrakstīju pats savu algoritmu.

 

Ideja šāda: Preģenerējam kartes lauku tipus - ūdens un zeme un noindeksējam tos, lai ātri varētu pārbaudīt kāda tipa laukam janāk blakus, virsū, apakšā etc. Talāk laižam velreiz loopu ģenerējam ar nelielu rondomu lauka backgroundu pa vienam pikselītim un skatamies, ja tagad ir ūdens lauks un talak zeme, tad savienojumu netaisam, ja tagad zeme un talak zeme šim laukam izveidojam savienojumu uz nakamo lauku. Un nakamo savienojam ar pirmo. Kad lauks uzģenerēts palaižam virsū blur effektu, lai padariitu attēlu mīkstaaku ($shis_px+ ($nakamais_px)) / 2.

 

Rezultāts izskatās šādi:

map_preview.jpg

 

Te ir 5 laukumi 60x60px pa horizontāli un 4i lauki pa vertikāli uzņemu vienu skrēnu, lai nebūtu jačakarējas ar laukiem. Problēma ir tāda, ka es nespēju izdomāt, kā uz tiem zemes laukiem izveidot kautcik reālu krasta līniju, kā redzams 1ajā postā balstoties uz augstāk minēto algoritmu, visi meiģinājumi ir cietuši fiasko.

Vēl ir problēma ar pašu pikseļu attēlošanas algoritmu, dažās vietās tiek radīti nesmuki plankumi, rūpīgi ieskatoties vai palielinot photoshopā var labi redzēt. Veicot testus atklājās ka imagesetpixel() funkcija palaiž blakus efektus apkārtējiem pikseļiem un izmaina krāsu nevis vienam pikselim kā ir paredzēts, bet visam 5x5 px laukumam ar norādīto pikseli centrā. Dažādi meiģināju izvairīties un nekā, tapēc dažās vietā ir ļoti uzkrītoša krāsu maiņa, jo arī blur effekts izmanto to pašu imagesetpixel(); Ir iespējams kautkā apiet?

Link to comment
Share on other sites

Muļķības! imagesetpixel() uzstāda vienu vienīgu pikseli. Tas kas tev tos apkārtējos maisa ir drīzāk jpeg kodējums (kas pēc būtības ir lossy). Lai saglabātos bilde 1:1 vajag lietot png (kas ir loseless).

 

Un Perlin noise algoritms nav jau grūts. To tak var praktiski jebkurā progr. valodā uzrakstīt.

Link to comment
Share on other sites

Skaidrs par to imagesetpixel(), bet neradīsies problēmas ar browseru savietojamību un png attēliem? Cik saprotu vairāki neatpazīst.

 

Pašu Perlin noise es jau pašā sakumā pārakstīju priekš php, bet es tomēr nesaprotu, kā viņš var palīdzēt man izveidot realistisku krasta līniju, ja viss, ko ar viņu panākam ir attēla nogludināšana, vismaz pēc dotajiem tutoriāļiem es tā saprotu. Eh izskatās, ka esmu uzņēmies utopisku ideju realizēt :/

Link to comment
Share on other sites

Man šķiet, ka PNG jau nu ņem visi, tikai, piemēram, IE slikti ņem alpha kanālu. Bet diez vai tu to tur taisies izmantot.

 

Pats noise veido random kaut ko ( piemēram, reljefu ), ko pēc tam nogludinot iegūst ko šādu:

p_128.jpg.

 

Ak jā - jo lielāka detalizācija būs tajā JPG bildē, jo labāk tā izskatīsies. Ja tu reljefu netaisīsi ar divām krāsām, bet piemetīsi visādus dažādu nokrāsu nelīdzenumus, beigu kvalitātei jābūt labākai.

Edited by Kavacky
Link to comment
Share on other sites

Nu vot tagad skaties uz to lillā attēlu un piemēram vietas, kur pikseļa krāsa (pelēkā) būs < 128, tad tas būs ūdens - viss pārējais - zema, tādējādi iegūstot krasta līniju. Ja gribi lielākas salas, tad vajag ņemt ar lielāku frekveni sadalītus tos trokšņus (ne tik sīkus tos izkliedējumus likt virsū).

Link to comment
Share on other sites

1. azstaigaa liidz biblioteekai un iskati DigitalTimes

preciizi nepateiksu vai pagajusho gadu vai aizpagajusho bija rakstu seerijija

par speelju programeeshanu ar tailiem :)

Laba ideja kaa veidot kartes (krasta liinijai bija vajadziigi vien 16 teili )

 

 

2. panjem PhotoShop ieliec vajadziigaa izmeera bildi - sagriez to pa vajadziigaa izmeera teiliem - ieseivo to dokumentu - un kartes generee nevis ar PHP bet kaadu grafisko redaktoru, vai programinju - tad tikai bildi kopee ieksh taa psd dokumenta un palaid lai IMAGREADY to saglabaa kaa HTML doc (bildes tiks

smuki sanumureetas - nosaukums+ 01-nn

kopee taas tur kur nepiecieshams - nosaukums - buus kartes nosaukums - ar numuri teilu numuri ....

Pa dienu taa var sagenereet simtiem kartes :)

----- lai atpaziitu izmanto algoritmu kas nosaka kaadas kraasa pikselis ir zem peles krsora ......

-------------

Manupraat visu to genereeshanu uzkraujot serverim - saits iznaaks stipri vien leens.....

 

P.S. pameklee netaa ir desmitiem programmu (bezmaksas) kas generee - kartes -

alja planeetu virsmas - tam pasham PhptoShop ir kaadi 5 vai vairaak pluginu :)

- nerunaajot par noise

Link to comment
Share on other sites

nu karti jau taisa:

1.) uzzīmē veselu + sagriež (iegūstam masīvu)

2.) saliek pa klučiem un saglabā masīvu

 

Tā kā karti ir jāveido vienreiz, neredzu problēmas arī ar otro variantu..

 

btw, laba ideja - RPG iekš weba :)

 

PS: 2. variantā ir pat iespēja uzreiz definēt `kluča nozīmi` - zeme, ūdens, zemūdens bumba, ēka, nauda... te tikai fantāzinju ir jāpieliek

Edited by Delfins
Link to comment
Share on other sites

×
×
  • Create New...