Véletlenszerű világ generálás?
A világot valami alapján mezőkre osztod. A mezők ugyanazon osztályból származtatott objektumok, amelynek a tulajdonságait véletlenszerű, vagy véletlennek tűnő, ám determinisztikusan meghatározható értékekkel töltöd fel (ez utóbbi a jobb).
Pl. a Minecraft esetén:
A játék elején generál egy véletlen számot (azt hiszem, 64 bites int típus) - ez a "seed". A játék mezőkből áll: ezek a kockák. A mezők ezen kívül úgynevezett "chunk"-okba csoportosulnak, ez jelenleg egy 16x16x256-os területet jelent. Amikor egy chunk a látóteredbe kerülne, a játék legenerálja. Először is, meghatározza, hogy milyen típusú terep legyen ott, ezt "biome"-nak nevezik. Ezt egy seedtől függő függvény adja meg, ami ezekből a biome-okból nagyobb, egybefüggő területeket képez, így a táj nem változik kockánként, nagyobb területeken hasonló, de nagy távok bejárása esetén mégis változatos. Ezután legenerálja az alapvető terepmintát, ami, ha jól tudom, különböző hullámfüggvények összege, a seed és a biome alapján paraméterezve. Ezek a hullámfüggvények azért jól, mert paraméterezéstől függően tudnak hegyeket/szakadékokat, vagy lankás tájat is képezni, akár nagyobb síkságokkal. Ráadásul ha sok ilyen hullámfüggvényt összeadsz, akkor változatosabb lesz a táj, nagyobb síkságok és meglepően realisztikus hegyek keletkezhetnek. Ezután jönnek az egyéb objektumok, bányák, barlangok, fák, fű, stb., ezeket is a seedből generálja, nem tudom, pontosan hogyan.
Ha pl. kísérleteznél ilyen hullámfüggvény alapú "tájgenerálással", arra az egyik legjobb eszköz az Excel. Egy hullámfüggvény valahogy így néz ki: f(x)=a*sin(b*x+c). Például ha egy két hullámfüggvényből előálló, egyszerű tájat próbálsz létrehozni (külön hullám lesz az x és az y tengelyen, különben csúnya törések lesznek!):
1) Írj számokat (nem kell egészeket) az A1, B1, C1, A2, B2, C2 cellákba. Lehetőleg ne túl nagyokat, mert az kaotikus lesz. De ezzel majd kísérletezhetsz. Ezek lesznek az a,b,c paraméterei a hullámoknak.
2) A B4 cellába írd, hogy 1, a C4-be, hogy 2, és csinálj így egy vízszintes sort számokból, amíg jónak látod. Az A5-be is írj 1-et, A6-ba, hogy 2, itt függőlegesen írd tovább a számokat. Ez lesz a koordináta-rendszer.
3) B5-be írd be:
=$A$1*sin($B$1*B$4+C1)+$A$2*sin($B$2*$A5+$C$2)
(a $ jelekre vigyázz!) Most húzd ki ezt a képletet, hogy az egész koordináta-rendszert kitöltse. Ez a terep. Csak egyenlőre nem látszik jól.
4) Készíts felületdiagramot a kapott számokból. Változtasd meg a paramétereket, és figyeld, mi történik.
Persze ez így nem az igazi, két függvény kevés egy realisztikus tájnak, legalább 6-8 nem ártana.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!