Web GL

Unknown magic content: 'webgl'

Elkezdtem játszódni egy új technológiával, amit WebGL-nek hívnak. Az egész nagyjából arra megy ki, hogy egy modern 2D vagy 3D grafikus szabványt lehessen a böngészőbe illeszteni, és ott javascripttel meghajtani. Amit feljebb láttok, az egyelőre egy igen kezdetleges kis Móricka-kód, minden komolyabb optimalizálás és egyéb baráti tevékenység nélkül. Idővel azt remélem, hogy sikerül egy kis játékot összedobálnom belőle.

A WebGL-t támogató böngészők itt találhatóak (hint: minden, kivéve az Internet Explorer-t).

2013.VI.16

Overlay kezelés


Több, mint két hete nem írtam új blog bejegyzést WebGL ügyben. Egyrészt kevesebb időm volt a projekttel foglalkozni, másrészt amikor volt időm, akkor egy elég nagy falatot rágcsáltam: az overlay kezelést.

Miről is van szó?

A térképnek lehetnek olyan elemei, ami a szereplőket takarhatja. A szereplők többnyire takarják a terep elemeit (pl fű, virágok, stb.) Voltak eddig is olyan tereptárgyak (amiket fixturáknak neveztem a kódban), amik takarhatták a szereplőket, pl fák koronája és bokrok felső része, és persze a szereplők is takarhatták egymást. Most nem ezekről van szó.

upload:WebGL/overlay.jpg

Amiről most írok, azok olyan elemek, amik a terep részei, de látszólag "magasabban" vannak a szereplő sprite-oknál. Példa lehet egy kifeszített zászló, egy sátorponyva, ami alá be lehet menni, vagy egy sziklaszirt felső vége. Az, hogy egy képelem milyen magasan található, azt a múltkor említett metaadat-szerketsző által szolgáltatott adatokból olvasható ki. Ahhoz, hogy a játék megfelelően jelenjen meg, a következőt kell csinálni:

  1. Kirajzolni az "alap" terepet (pl fű, víz, homok, stb.)
  2. Rárajzolni azon overlay rétegeket, amiknek nincs "magassága".
  3. Felülről lefele haladva kirajzolni a sprite-okat és az overlay sorokat összefűzve azok y gyökere szerint rendezve.
    1. A sprite-ok y gyökere általában a sprite legalja, vagyis ahol a szereplő lába van.
    2. Az overlay-ek gyökere annyi mezővel van lejjebb, mint ahova ténylegesen kirajzoljuk őket, mint ami az adott overlay "magassága".
  4. És már készen is vagyunk! Wow!

Ahhoz, hogy mindez elfogadható sebességgel történjen, lehetőleg minél több információt előre össze kell lapátolni a videókártya memóriájába! Ezt a következőképpen csinálom:

  • A terep, és a 0 magasságú overlay-ek egy grafikus bufferbe kerülnek. Ezeket így egyben ki lehet rajzolni, mind a 200.000 vertex ponttal!
  • A magassággal rendelkező overlay elemeket sorokba rendezem. Például a 10. overlay sorba kerül a 9. sorban található, 1-es "magassággal" rendelkező overlay elemek, vagy a 7. sorban található, 3-as "magassággal" rendelkezőek.
  • A fixtúrákat (fák, bokrok) y szerint sorrendbe rendezve egy bufferbe forgatom.

Ezek után a kirajzolás úgy néz ki, hogy a sprite-okat, overlay-eket és a fixtura buffer megfelelő részeit kell szépen összefésülni. Ez egyike a bonyolultabb metódusoknak a programban.

Aztán persze az egész meg van vadítva azzal, hogy jó lenne mindezt szerkeszthetővé is tenni. Ouch! Pedig milyen szép egyszerűen indult minden...

Tagek:
 
Utoljára módosította UPi 2013.VI.16 10:03-n; 0 hozzászólás;
Bejegyzés módosítása | PermaLink

2013.V.31

A Metaadat szerkesztő


Jelenleg a játék megjelenítésére a program egy nagy textúrát használ. Ennek a mérete 2048 * 1024, vagyis 64 * 32 "mező"(tile). (A mező az az elem, amiből a térkép felépül, egy mező mérete 32 * 32 képkocka – emez konfigurálható.)

Maga a textúra egy png file, amit kb úgy lapátoltam össze egyelőre a netről összerabolt képelemekből. Csakhogy, ez a kép nem hordozza azokat az információkat, amik szükségesek ahhoz, hogy a játékban ezek a képelemek megfelelően működjenek. Mik is ezek az információk?

  • A bejárhatóság (passability) azt fejezi ki, hogy az adott képelemen a szereplők átgázolhatnak-e, vagy sem. Például, a fű bejárható, de a víz nem. (Az RPG játékokban senki sem tud úszni.)
  • Az magasság (elevation) az a mérőszám, hogy a képelem mennyire hajlamos takarni. Egy magasabban elhelyezkedő képelem takarhat egy olyan mozgó elemet is, amelyiknek az Y koordinátája nagyobb. A magasság formálisan egy 0-tól 5-ig terjedő szám (ugye, a fák nem nőnek az égig!), leegyszerűsítve azt fogalmazza meg, hogy az adott képelem takarási szempontból hány mezővel van lejjebb a képernyőn.
  • Kitöltöttség (solidity): Különböző rajzolási optimalizációkat tesz lehetővé, ha eltárolom, hogy egy mező teljesen kitöltött-e, vagy vannak átlátszó részei.

Hogy ezeket ne kelljen kézzel csinálnom kockás papíron, és ne hülyüljek meg, csináltam egy primitív metaadat szerkesztőt. Az egész nagyon egyszerűen működik: A billentyűzeten "P", "E" vagy "S" gombokkal, vagy a felső gombsorral lehet váltogatni az üzemmódok között. Szerencsére a kitöltöttséget nem is kell kézzel megcsinálnom, nagyjából 30 sor kód kiszámolja nekem szépen. A többi az én feladatom, kitartó kattintgatást igényel.

upload:WebGL/passability_editor.png

Felül látható a bejárhatóság szerkesztő. A nyilak azt mutatják, hogy az adott mezőről milyen irányokba haladhat tovább a T. játékos. Érdemes megfigyelni, hogy a fák koronája bejárható (mögötte fog menni a szereplő, a később feltűnő magasság beállítás miatt), de a töve nem. A zöld fennsík bejárható, de nem minden irányban: a nyilakból látszik, hogy a játékos nem mehet le a szélén.

upload:WebGL/elevation_editor.png

Íme a magasság beállítások. Látszik, hogy mik azok a részek, amik mögé a játékos berambózhat, és ott takarásban lesz.

Hát ennyit mára.

Tagek:
 
Utoljára módosította UPi 2013.V.31 07:55-n; 0 hozzászólás;
Bejegyzés módosítása | PermaLink

2013.V.21

Kóstoljátok meg a szerkesztőt!


A szerkesztő most már képes a térképeket egy-egy wikioldalba kimenteni, és onnan betölteni. Például itt a Maps/Wilderness1 oldal, amire rákattintva az oda lementett térképet lehet kipróbálni, illetve szerkeszteni.

Enjoy!

Tagek:
 
Utoljára módosította UPi 2013.V.21 15:09-n; 1 hozzászólás;
Bejegyzés módosítása | PermaLink

2013.V.15

Tömegnyomor a barlangban


Továbbfejlesztettem a térkép szerkesztőt: be lehet állítani az új térkép méretét, és a szerkesztés közben ki lehet próbálni a szerkesztés alatt álló pályát.

Így néz ki egy 50x50-es barlang pálya, amikor ugyanannyi emberke rohangál benne, mint az amúgy 128x128-as erdős pályán:

upload:WebGL/crowded_cave.jpg

Gondoltam, megosztom veletek, mert viccesnek tűnt. :)

Tagek:
 
Utoljára módosította UPi 2013.V.15 05:44-n; 0 hozzászólás;
Bejegyzés módosítása | PermaLink

2013.V.13

További térkép generátorok


A tegnapi hegyeken felbuzdulva nekiláttam egy új térkép generátornak. Ez a korábbi erdős-mezős-vizes terep helyett egy kicsit nyomasztó színvilágú barlangot generál:

upload:WebGL/thecave.jpg

A barlang falain látható, hogy a tegnapi hegyrajzoló algoritmus építi fel a falakat.

Így néz ki egy teljes barlang térkép 10%-ra kicsinyítve:

upload:WebGL/thecave_zoomout.jpg

A barlang kamrákat kialakító, sejtautomatán alapuló algoritmus mellékterméke egy másik generátor, ami nagyjából véletlenül jött létre; ez egy tagolt szigetvilágot készít:

upload:WebGL/archipellago.jpg

Tagek:
 
Utoljára módosította UPi 2013.V.13 10:30-n; 0 hozzászólás;
Bejegyzés módosítása | PermaLink


KelleneÍrniEgyJátékot
Tagek: