Web GL

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...

Utoljára módosította UPi 2013.VI.16 10:03-n
Bejegyzés módosítása | PermaLink
Votes disabled.
Tagek: