C/C++, hobbi játékprogramozás RayCaster 3D az oktatásban Fogarasi Gergő, Berecz Antónia www.fogarasi.info, gergo@fogarasi.info, berecz@gdf.hu A fallal ütközésre a legpontosabb algoritmus a DDA-n alapul: A kamera egy vektor , síkja a számítógép monitorjának felülete, ahol az irányvektor függőleges, és a képernyő belseje felé mutat. Néhány jól mutató extrával A „7th Kingdom” FPS játék közben C/C++ kódja kb.10 kloc (10 000 kódsor). Mai átlagos gépen, egyetlen szálon kb. 110 FPS-sel fut. Megvalósított még: idő, időjárás, Nap és Hold, DeepthFogging. Bevezetés Az 1980-as, 1990-es évek számítógépes játékait meghatározó RayCaster pszeudo-3D algoritmust még a grafikus kártyák ideje előtt alkották meg. Azonban nem csak történelmi érdekességként van jelentősége, hanem a BSc-s programozás-oktatásban is fel lehetne használni. C/C++, hobbi játékprogramozás Cél: kezdő hobbiprogramozóknak sikerélmény, de igen alacsony szintű megközelítésnél sokára lesz eredmény, igen magas szintű megközelítésnél nem érzi saját alkotásának, kizárólag a C/C++ nyelvi elemeinek használatával, 2D pixelrajzolásra és ablakozásra képes lib-bel 3D-t létrehozni. Napjainkban: a nagyobb, PC-s játékokat még mindig C++-ban írják, a számítógépes grafika tipikusan teljesítménykritikus, a Java/.NET kényelmes, nem erőssége a teljesítmény. Megoldás: megtanulni OpenGL-t mind 2D-s, mind 3D-s használatra, érteni a 3D játékkészítés alapjait, nulláról RayCaster játékmotort készíteni viszonylag egyszerűen megérthető, újraalkotható, az eredmény egészen szép. RayCaster matematikai modell Lépései: 2D-s, felülről elképzelt világ (építészeti alaprajz). Külön 2D-s tömb van az ellenségekre, a tereptárgyakra, a falakra, a padlókra, a plafonokra stb. Fiktív 2D-s tömbök és Egy 2D-ben elképzelt fiktív világ egyéb változók pszeudonyelven Ezután 3D-vé transzformálja a RayCaster algoritmus: A 2D-s négyzethálóban minden négyzetnek van értéke: nulla, ha ott éppen nincs fal, pozitív, ha fal van adott színnel vagy textúrával. A képernyő minden x helye egy sugarat indít, amely a játékos pozíciójában kezdődik. A sugár iránya függ: a játékos aktuális nézeti irányától, a képernyő x koordinátájától. Ezután tovább kell mozgatni ezt a sugarat a 2D-s térképen, amíg bele nem ütközik a térkép olyan négyzetébe, amely éppen fal. Ekkor ki kell számolni a távolságot az ütközési pont és a játékos között, és fel kell használni ezt a fal magassághoz, hogy kirajzolhassuk a képernyőre: ha távolabb van, kisebb, ha közelebb van, magasabb. Továbbfejlesztési lehetőségek OpenCL alapú GPGPU: platformfüggetlen, sokezer FPS értéket eredményez. A RayCaster matematikai korlátainak kitolása. Javaslatok oktatásba bevonására OpenGL/C++ programozás tanítása előtt. BSc MI szakon a programozási alapok, a programozási technológia, a számítógépes grafika tanulása után. Az új tantárgyban RayCasterre épülő játék fejleszthető: egyszerű lövöldözős játék, egyszerű heurisztikával, mesterséges intelligenciával, ember gép ellen. Lezárásként az érdeklődőknek virtuális valóság modellezése tantárgy. Irodalomjegyzék [1] Jagged85, Ray casting, Concept. www.giantbomb.com/ray-casting/3015-1517/, 2014. március 21. [2] A. Christian Seidel, Advanced Raycasting Techniques. GameDev.net, 1999., archive.gamedev.net/archive/reference/articles/article872.html [3] Fogarasi Gergő, “7thKingdom 1 - demo 1”. fogarasi.info, www.fogarasi.info/index.php?oldal=5#ketto_a [4] Gy. Antal, F. Csonka, L. Szirmay-Kalos, Háromdimenzizós grafika. ComputerBooks Kiadó, Budapest, 2006. ISBN: 9636183031, 494 p.