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ó.
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:
- Kirajzolni az "alap" terepet (pl fű, víz, homok, stb.)
- Rárajzolni azon overlay rétegeket, amiknek nincs "magassága".
- Felülről lefele haladva kirajzolni a sprite-okat és az overlay sorokat összefűzve azok y gyökere szerint rendezve.
- A sprite-ok y gyökere általában a sprite legalja, vagyis ahol a szereplő lába van.
- Az overlay-ek gyökere annyi mezővel van lejjebb, mint ahova ténylegesen kirajzoljuk őket, mint ami az adott overlay "magassága".
- É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...
Apocalypse KÖZÖS
'Paranoia is a very comforting state of mind. If you think they're out to get you, it means you think you matter.'
Hozzászólások
0