Air Traffic Control (ATC) Simulator

Ez egy igazi "success story", amit most elmesélek.

Az egész azzal kezdődött, hogy hobbiból fejlesztettem egy grafikus engine-t, amiről itt olvashattok bővebben. Ahogy haladtam előre a fejlesztéssel, mindig készítettem videókat arról, hogy hol tartok és azokat feltöltöttem youtubra.

Aztán kaptam egy emailt valami Brambilla nevű embertől. Mondom magamban egy újabb spam levél, de minő szerencse, mielőtt beraktam volna a kukába, megpillantottam benne a grafikus enginem nevét. Hoppá. Végigolvasva az angol levelet, kiderült, hogy Giovanni Brambilla olasz programozó egy grafikus motort keres a szimulátorához, amit éppen Delphiben írt, és pont passzolt hozzá az én grafikus motorom. Többszöri levélcsere után meg is állapodtunk, hogy fejlesztek neki 3D felhőket és időjárási viszonyokat, mert akkor még ez nem volt része az éppen készülő grafikus motoromnak. Mondanom sem kell, a kommunikáció nem volt egyszerű közöttünk, hiszen nekem akkor még nem volt meg a nyelvvizsgám és Giovanninak sem az angol az anyanyelve. Így még nagyobb volt a kihívás. Később 3d modellezésben is segítettem neki, és repülőtereket készítettem (Bari, Pescara).

 

Így kezdődött egy gyömölcsöző, hosszú távmunka köztünk úgy, hogy sohasem találkoztunk személyesen egymással. Csak email-en és akkoriban még Messengeren tartottuk a kapcsolatot. Az idő elteltével pedig a munkatársból barát lett.

 

Íme néhány kép a grafikus motorról, a szimulátorról miközben használják a tanulók és néhány vicces kép a fejlesztés menetéből:

 

A bari repülötér modellje egy pici techdemóval letölthető, ami egy bemutatóra készült (F1-el hozható elő a leírás). Nyilván a teljes szimulátort nem oszthatom meg.

Bari techdemó

 

Rantanplan Graphics Library

Saját 3D enginem Delphi nyelven. Maga a grafikus engine fejlesztés régóta érdekel, mert tele van komoly kihívásokkal. Egy engine készítése során az ember mindig küzd az FPS értékkel, hogy szinten tartsa, ugyanakkor a látvány minőségére is ügyelni kell. Az engine nulláról lett felépítve az OpenGL api-t használva nincsenek egyéb keretrendszerek, teljesen saját kezű munka az utolsó háromszögig. Természetesen OOP paradigma mentén épül föl.

Talán ez az egyik legnagyobb projektem. Csak a gui kezelésére szolgáló RGLGUI unit 3000 sorból áll és ez csak egy a sok unit-ból amit az engine használ. 

Ezt a grafikus könyvtárat több éven át készítettem hobbiból a szabadidőmben, de azóta már leálltam a fejlesztésével, mivel most már inkább webes és mobil platformokra koncentrálok.

 

A grafikus engine tulajdonságai

  • Saját 3d modellek kezelése
  • LOD
  • Terrain, shaderrel textúrázva
  • Skybox, Skydome és társai
  • Napszak rendszer (nappal / éjszaka csillagokkal ) égbolt színezéssel
  • Időjárás rendszer (3D villám, eső, hó)
  • Lensflare effekt
  • 3d felhők
  • Shader Pipline (Depth Of Field (DOF), Ambient Occlusion, Bloom, Brightness/Contrast)
  • material editor
  • reflected, refracted water shader
  • saját GUI (ablakok, panelek, feliratok, gombok, csúszkák, progress bar)

 

 A demó program:

 

 

Bővebben

Saját Level Of Detail (LOD) algoritmus

A Sutherland Hodgman poligonvágó algoritmusnál már beszéltem arról, hogy milyen fontos a poligonok számát redukálni a 3d grafikában. A vágásuk az egyik lehetőség, a másik módszer, ami a látható poligonokra vonatkozik a Level of Deatil technika, röviden LOD. A LOD algoritmusok segítségével el tudjuk azt érni, hogy a nézőponttol távolabb lévő objektumok poligonjainak számát csökkentsük anélkül hogy érdemben romlana az objektum körvonala. Mivel az objektum távol van, nem szükséges olyan részletességgel megjeleníteni, mint egy a nézőpont előtt lévőt.

A nehézség ebben az hogy, mely éleket távolítsuk el, anélkül hogy az objektum alakja megsérülne. További nehézség egy olyan adatszerkezet létrehozása ami megfelelő „tárolója” lesz az ilyen objektumoknak és dinamikusan tudja kezelni a LOD szintet. Mindezt pedig úgy, hogy a LOD szintek között gyorsan tudjunk váltani. Hiszen ha sok CPU időt veszítünk vele, akkor nincs értelme az egésznek.

Az évek során rengeteg LOD algoritmus született. Az általam írt egyedi LOD algoritmus a grafikus enginem egy részét képzi. Maga a program egy 3d modell szerkesztő program alapjait is tartalmazza, amelyben a polygonokat és objektumokat ki lehet jelölni.

 

 A program működés közben:

 

Képek a programról:

 

Futtatható verzió letöltése

 

 

Winsee a mozaik képnézegető

Történet: Szükségem volt egy olyan képnézegetőre ami mozaik nézetet is tud, mivel így könnyen megállapítható egy textúráról, hogy megfelelően illeszkedik-e a szélein. Így hát írtam egy saját képnézegető programot, amibe aztán egyre több funkciót pakoltam bele. Elég régi, 2006-os projectem volt.

 

A képnézegető főbb tulajdonságai:

  • Képek megjelenítése több módban (méretarányos nagítás, nagyítás, mozaik)
  • Tallozó ablak mappák megjelenítésével
  • Képtranszformációk (forgatás, tükrözés, konvertálás, mozgat, másol)
  • Képnézegetés közben az insert lenyomásával az aktuális képet ki lehet jelölni, majd a kijelölt képekkel transzformációkat véhezni
  • Színsémák a programhoz

 

 

Képek a programról:

 

 

Futtatható verzió letöltése

 

Sutherland Hodgman vágóalgoritmus implementációja Delphi nyelven

A poligonok nagyon fontos szerepet játszanak a számítógépes grafikában. Így a velük kapcsolatos műveletek is fontosak. Az egyik ilyen megoldandó probléma a poligonok vágása úgy, hogy a poligon ne essen szét. Hiszen a vágóélekkel új élek kerülnek a poligonba és nem mindegy, hogy azt milyen sorrendben jelenítjük meg. Rossz sorrend esetén kicsavarodhat a poligon.

Hol lehet hasznos? Gondoljunk csak bele, egy számítógépes játéknál a 3d-s világ poligonokból épül fel. A poligonok megjelenítése nagy GPU időt vesz igénybe, ezért annál gyorsabb lesz a játékunk, minél kevesebb poligon jelenítünk meg. Tehát nyilván nem akarunk azon poligonrészekkel dolgozni, amik úgy is kiesnek a képernyő tartományából. Nyilván az ilyen vágásokat már hardver szinten támogatják, de mindennek az alapja az algoritmus. Na jó a pörköltnek nem ez az alapja.

Magáról az algoritmus magyarázatáról itt egy videó:

 

Az algoritmus működés közben:

 

 Képek a programból:

 

 

Futtatható verzió letöltése

 

 

 

2019 © Robert Girhiny