Házi feladatok

Kisházi feladatok

A tárgyhoz kisfeladatok tartoznak. A kisfeladatok megoldása megértésből, modellalkotásból, algoritmus létrehozásból, C++ nyelvű kódolásból, végül hibakeresésből és javításból áll, amelyeket a tanultak alapján önállóan, külső szóbeli vagy írásbeli segítség nélkül kell elvégezni. A házifeladatot a házifeladat beadó rendszerből (http://cg.iit.bme.hu/grafhazi/) letöltendő legfrissebb keretprogramba kell ágyazni, és a kijelölt határidőre a házifeladat beadó rendszerbe feltölteni. A Windows és Visual Studio használókat segítendő, egy Visual Studio projektet, valamint a szükséges glew és freeglut könytárakat is összegyűjtöttük a http://cg.iit.bme.hu/~szirmay/grafika/GrafikaHaziCsomag.zip fájlban. Más fordítót vagy Linux-ot, illetve Mac-et használók a házifeladat beadó rendszerből letölthető, vagy innen is elérhető framework.cpp, framework.h keretfájlokból és a Skeleton.cpp házifeladat fájlból induljanak ki, a projektet már a rendszerük követelményeinek megfelelően önállóan csinálják meg és a szükséges glew és freeglut könyvtárakat (.h, .lib, .dll fájlok) az Internetről töltsék le és helyezzék el. 

Linux felhasználók saját felelősségre Börcsök Barnabás programjaiból is kiindulhatnak: https://git.sch.bme.hu/bobarna/grafika-linux-starter-pack, de ebben az esetben nem garantált, hogy a fáljok szinkronban vannak a legutóbbi változtatásokkal. 

Házifeladat beadó rendszer regisztráció

A házifeladat beadó rendszerbe (http://cg.iit.bme.hu/grafhazi/) a tárgyat ebben a félévben felvett hallgatók regisztrálhatnak, az adatokat a félév végén töröljük, így tárgy újrafelvételkor a regisztrációt újra meg kell ejteni. A regisztráció során ügyeljenek az email cím hibátlan megadására, ahová a jelszót várják. A tapasztalatok szerint a hotmail gyakran elnyeli a leveleket, ezért célszerű más levelező címét megadni. Ha probléma merül fel a regisztráció során, akkor Fridvalszky András (fridvalszky@iit.bme.hu) tud segíteni.

Kisfeladatok beküldése és értékelése

A framework.cpp és framework.h fájlok nem változtatandók, az önálló munkát kizárólag a Skeleton.cpp-be kell tenni, amit tetszés szerint át lehet nevezni, majd a házifeladat beadó rendszerbe kizárólag egyetlen cpp fájlt kell feltölteni.

A házik határidejének elmulasztása jogvesztő, a határidő csúsztatásától közkívánatra tartózkodni fogunk. A házik nem pótolhatók. Az egyes kisfeladatok elkészítéséhez csak azok az OpenGl 3.3 és glut függvények használhatók, amelyek az előadáson az adott kisfeladat kiadásáig elhangzottak. A házifeladat beadó rendszer a feltöltött forrásnyelvű programokat tipikusan 5 perces periódusidővel fordítja, futtatja és teszteli, ami a terhelés függvényében nőhet, ezért érdemes jóval a beadási határidő előtt megpróbálkozni a feltöltéssel, hogy a fordítási és futtatási hibák kijavítására még lehetőség adódjék.  Amennyiben a beadó rendszer látszólag lefordította a programot, de hosszú idő után sincs futási eredmény, az arra utal, hogy a program brutálisan elszállt. A futási időre korlátot állítunk fel (tipikusan 2 perc), az azt túllépő programokat az időtúllépést jelezve lelőjük. A megoldáshoz csak a keretben szereplő header fájlokban deklarált könyvtári függvényeket lehet alkalmazni, de pl. fájl műveleteket, a printf-et kivéve nem. Mivel a printf kimenete adatbázisba megy, kérjük annak túlzott használatát mellőzni, hogy ne keletkezzenek futásonként gigabájtos rekordok.

Plágiumnak minősül mások szellemi termékének forrásmegjelölés nélküli felhasználása, függetlenül attól, hogy szóban, írásban, Interneten vagy bámely más csatornán jutott el a házifeladat beadójához, amely szabály alól csak az előadásfóliák, a tantárgy oktatóinak szóbeli tanácsai, és a grafházi doktor levelei képeznek kivételt. Plágium esetén a feladatra adható pontokat negatív előjellel számoljuk el, és ezzel párhuzamosan a tett súlyosságának megfelelő fórumon eljárást indítunk.

Az első házira 2, a másodikra 3, a harmadikra 4 pont kapható maximálisan. A ZH-ra bocsátás feltétele, legalább 3 házipont összegyűjtése. A házifeladatokhoz a ZH-n kérdések kapcsolódnak és a házi teljesítése valamint a kapcsolódó kérdés megválaszolása együttesen bónuszpontokat eredményezhet (részleteket lásd a TAD-on).

Az értékelést vitatni, reklamálni a félév végén, külön erre a célra szervezett alkalommal lehet, ahol leülünk a házi tulajdonosával és együtt végignézzük az alkotás kiválóságait és esetleges gyengeségeit, és indokolt esetben az értékelésen módosítunk. Email-es reklamációtól és egyet nem értés esetén az oktatók szidalmazásától kéretik tartózkodni!

Nagyfeladat

A kisfeladatokon kívül lehetőség van önálló, a kisháziktól eltérő témájú és komplexebb nagyházi beadására is. A nagyházik témáját az előadás szünetében az előadóval jóvá kell hagyatni, a kész feladatot nem kell elküldeni, csak a félév végén a kijelölt időpontban megvédeni.

Grafika Házi Feladat Doktor 

A doktor a házi feladat beszedőre (http://cg.iit.bme.hu/grafhazi/) feltöltött házi feladatokról állít ki diagnózist, ad tanácsokat a jobbulás érdekében. A doktor nem sebész, a házi feladatokba nem nyúl bele, azokat nem változtatja meg. A doktor betegeket kezel, amíg nincs ilyen, addig nem tud tanáccsal szolgálni. Egészségesek ne terheljék a rendszert "hátha beteg vagyok" felkiáltással és "ez idáig hány pontot ér" kérdésekkel, a panaszt és a kérdést világosan kell megfogalmazni. A rendelési idő a beadási határidő előtt három nappal befejeződik, post mortem prosectura pedig itt nincs. A doktorhoz email-en, grafikahazidoktor@gmail.com címen lehet fordulni (megszólítás "drága doktor úr"), a beteg azonosítására név+neptunkód szolgál. A doktort a hippokratészi esküjében is szereplő orvosi titoktartás köti. A doktor is ember, gyógyíthatatlan betegekkel nem tud csodát tenni, és pápai tévedhetetlenséggel sem bír.

A Grafika Házi Feladat Doktor tanácsai csak neked:

 
1. Lebegőpontos számokat (float, double) ne komparálj == operációval, adj hozzá tűrést!

2. ANSI C-ben az abs int változós függvény, helyette valószínűleg fabs-sot szerettél volna írni.

3. ANSI C++-ban temporális változót csak const referenciához lehet kapcsolni. Ha otthon VS-ben lefordul, de a beszedőben nem, akkor ez a tipikus hiba. 

4. Globális változót konstans kifejezéssel inicializálj, pl. glutGet függvénnyel soha! Hasonlóképen globális objektum konstruktora ne tartalmazzon gl és glut függvényeket! A globális változók inicializálása ugyanis a main indulása előtt történik, amikor a glut és gl nincs még inicializálva. Az inicializálást tedd az onInitialization függvénybe, erre szolgál!

5. Ne feltételezd, hogy a főciklus gyorsan pereg, helyette készülj arra, hogy a "gép lehet akár annyira is terhelt", hogy két ciklus között percek telnek el!

6. Ha otthon "tökéletesen fut", de azon a "szar" beszedőn pedig elszáll, akkor mielőtt elkezdenél szentségelni és igaztalanul sértegetni az érzékeny lelkű beszedő programot, ellenőrizd a 4., 8., 9., pontokat! Ha percek után sem kapsz képet az arra utal, hogy a programod már az elején feldobta a talpát, aminek gyakran a 4. pont megsértése az oka. Ha fut, de nem úgy, ahogy otthon, akkor jöjjenek a 2. és 5. pontok! Ha otthon szép a 3D virtuális színtér képe, de a beadó rendszeren az éleknél a lapok egymásba harapnak, akkor érdemes ellenőrizni, hogy a hátsó és az elülső vágósíkok távolságaránya nem túl nagy-e (ne legyen 1000-nél nagyobb).

7. Kerüld a default konstruktort, ami nem csinál semmit, ha szükség van default konstruktorra (mert pl. tömböt akarsz létrehozni ilyen objektumokból), akkor használj default paraméterezést, így ugyanis elkerülheted, hogy az adatváltozók inicializálatlanok maradjanak!

8. A glutPostRedisplay()-t semmi szín alatt se írd az onDisplay()-be, mert akkor a szerencsétlen ablak nem tud érvényesülni. A glutSwapBuffers() viszont csak itt legyen egyszer a végén. 

9. Ne csak debug módban tesztelj! Vedd figyelembe, hogy a jó program minden fordítóval és minden gépen jól fut, ne a fordítókat cserélgesd, hanem a programot javítsd ki! Ne szidd a házi feladat beadó rendszer anyukáját, ő nem tehet arról, hogy rossz programot próbálsz rátukmálni!

10. Olyan képletet ne használj fel, amit nem értesz száz százalékosan, azaz nem tudnád pl. a helyességét bebizonyítani!

10+1. A házi fejlécében szereplő instrukciókat olvasd el és tarsd is be. Például ne használj olyan OpenGL függvényt, amely ott nem szerepel, mert lehet, hogy a beszedőn le sem fog fordulni, miközben otthon jól működhetett.

10+2. A "szakértő" barátok tanácsait csak akkor vedd komolyan, ha el is tudják magyarázni, hogy miért kell úgy csinálni, ahogy mondják. Ex catedra kijelentéseknek ne adj hitelt! Inkább gondolkodj és fedezd fel ezt a világot magadnak, az a leghasznosabb!

10+3. Ha a házifeladatodat nem fogadják el pedig "rengeteget dolgoztál rajta", ne támadj rá a tárgy oktatóira! A házi védés azért is van, hogy az ilyen jellegű panaszodat szakmai érvekkel elővezethessed (nem szakmai érvek, amelyekre nem érdemes hivatkozni: 1. A google ezt dobta ki. 2. Józsi mondta, hogy így csináljam. 3. Egy csomó időm ráment, igazán megérdemlem, hogy elfogadják.). 

Ízelítő a kisházi feladatokból:

2010. ősz:

2D útkereszteződés szimulátor: A zebra fekete fehér, a járókelők színes téglalapok, az autók ugyancsak. A járókelőknek zöld/piros lámpájuk van, az autóknak piros/sárga/zöld, amelyek a szokásos működésűek és ugyancsak téglalap alakúak. Az autók lámpája 5 másodpercig zöld, 4 másodpercig sárga és 5 másodpercig piros, a gyalogosoké szinkronban működik. Az autók automatikusan közlekednek és mindig tiszteletben tartják a lámpa utasításait, azaz piros lámpa esetén mindig megállnak éppen ott ahol vannak (nem kell előrecsorogni a lámpáig). A járókelőt viszont tetszőleges időpontban elindíthatjuk úgy, hogy az egér bal gombját lenyomjuk, amikor a kurzor éppen felette van. Ha az autó elüti a járókelőnket, akkor az eltűnik. Egy SPACE lenyomása után kapunk új járókelőt, aki a képernyő jobb szélén ütközve, függőleges irányban pedig a képernyő közepén jelenik meg. A SPACE hatására nem csak egy új járókelő születik a zebra szélén, hanem a képszintézis nézete (viewport) megváltozik, mind méretében, mind pedig a windows ablakon belüli helyében. A járókelő 5 másodperc alatt ér át az úton. Mialatt a gyalogosnak piros a jelzés, az autók folyamatosan jönnek és 3 másodperc alatt mennek át a kameránk látóterén. A program futásának kezdetén a viewport legyen a teljes 600x600 pixel nagyságú ablak!

Placcs lányok balettoznak: A Placcs családban három lány van, Placcs Bereniké, Placcs Cezarina és Placcs Nikodémia. Benediké 2D-s sziluettjét egyetlen Bézier görbével, Cezariáét egy Catmull-Rom spline-nal, Nikodémiáét pedig egy NURBS-szel írhatjuk le (vajon melyikük schlank?). A lányok normális testalkatúak, tehát egy-egy fejük, két-két lábuk, illetve kezük van. A lányokat hasonló referenciahelyzetben, célszerűen, de nem kötelezően, ugyanazokkal a vezérlőpontokkal definiáljuk. A Placcs család a 2D-s világban egy 10 m hosszú és 10 méter magas lakást birtokol, a kb. 3 méter magas lányok a világban kényelmesen elférnek egymás mellett. A lányok balettoznak, így ha nevük kezdőbetűjét lenyomjuk, akkor egy 1 méter magas grand jeté-t mutatnak be (= nagy, repülésszerű ugrás, horizontálisan szétvetett lábakkal) és a levegőben maradnak mindaddig, amíg rájuk nem klikkelünk. Ekkor visszatérnek a földre (a lányok lába a föld közelébe kerül, de nem kell tökéletesen pontosan a földön állniuk). A lányokat szivárvány színátmenettel kitöltött területekkel jelenítjük meg, ahol monokromatikus fényeknek megfelelő színek követik egymást, minden lánynál más irányban. A középső lány olyan magasra fog ugrani, hogy a kamerakép közepére kerüljön. SPACE lenyomására a kameránk mindig a következő lányt veszi célba (a lány, ha felugrott a kép közepén lesz), és a kamerán "látószöge" (a befogott tartomány) minden SPACE után kisebb lesz, azaz folyamatosan zoom-olunk.  A megoldásban csak a "2D grafikus rendszerek" végéig tanult OpenGL függvények alkalmazhatók (pl. textúrák nem).  Színillesztő függvényeket elég durván közelíteni. Egy túlságosan finom mintavételezésű változat az alábbi honlapon elérhető: http://cvision.ucsd.edu/cmfs.htm

Arany szoba: Készítsen mozgó pont fényforrással megvilágított csendéletet kétirányú sugárkövetéssel. A sugárkövetést a CPU-n kell megvalósítani, a kiszámított és tone-mappelt 600x600 felbontású képet glDrawPixels hívással kell a rasztertárba írni. A színtér egy henger alakú szoba, amelynek fala optikailag sima arany, padlója barna diffúz felület. A szobában három optikailag sima felületű tárgy van, egy poliéder, egy parametrikus felületből tesszellált háromszögháló és egy implicit felület, amelyek közül az egyik üveg, a másik réz, a harmadik pedig ezüst. A tárgyak primitívszáma (háromszögek és kvadratikus felületek száma) max. 100 lehet. A szobát egy izotróp (irányfüggetlen) fehér fényforrás világítja meg, amely 10 másodperc alatt faltól falig vándorol. A fotonlövés fázisában, a beadott változatban ne indítsunk túl sok fotont (pl. max tízezer), azaz a képszintézis ideje az 1 percet ne lépje túl. A diffúz anyagú padlóhoz rendelt fotontérkép felbontása 100x100. Poliéder példák: http://local.wasp.uwa.edu.au/~pbourke/geometry/platonic/ Paraméteres felület példák: http://www.vtk.org/VTK/img/ParametricSurfaces.pdf

Angeli Róbert, Leitner Szabolcs , Kovács Balázs , Zsemlye Nóra

ATEW: Írjon OpenGL programot, amely a Star Wars univerzum Rishi bolygóján egy rövid jelenetet mutat be. A talaj sík, diffúz textúzott. A talajon két db. kétlábú, spekuláris fémes jellegű All Terrain Empire Walker (ATEW) áll, amelyek a csípő és a térdízületeiket mozgathatják, ezen kívül a felső részük elfordulhat, a felső részükhöz rögzített ágyúcső emelkedési szöge állítható. A Rishi-nek három Napja van, amelyek irányfényforrások, az ATEW-ek lövedékei gömbök, amelyek pontfényforrásokként is működnek. Az ég ambiens fényforrás. Az ATEW-eken kívül még néhány szabadon megválasztható textúrázott tereptárgy is található. A virtuális kamera a jelenet körül kering, vigyázó tekintetét a két ATEW középpontjára veti. Az ATEW-ek folyamatosan előre lépdelnek, kétmásodpercenként egyet lépve. A támaszkodó láb mindig nyújtva van (térdízület merev), az emelt lábon viszont a térd hajlít. A támaszkodó láb nem csúszkál a földön (inverz kinematika). Az ATEW-ek megpróbálják egymást lelőni. A lövedék ferde hajítással lassan repül, a (sebességgel arányos) közegellenállás jelentős és pontról-pontra véletlenszerűen változik a levegőben, hogy nehezebben találják el egymást. Az eltalált (elég a befoglaló térfogat eltalálását ellenőrizni) ATEW hanyatt esik. A textúrákat procedurálisan kell generálni, a textúrázott felületeken is hat az illumináció. Az avatárunk a jelenet körül forog, tekintetét az ATEW-ek közé veti. A szimuláció során használt időlépést kisebbre lehet venni, mint az Idle időlépését, azaz, ha az Idle-ban kapott időváltozás túl nagy, azt több szimulációs lépéssel is fel lehet dolgozni (a szimulációs időlépés lehet pl. 0.1 sec).

Szabó Bálint István , Kovács Andor , Mészáros Kornél , Illés János , Bozóki Szilárd , Medvey ÁdámDorjgotov Anudar , Lám István , Angeli Róbert Hámos Gergely , Nagy Zoltán Adrián , Csontos Gábor , Szabó András , Magyar Ferenc

2011. tavasz:

Egér labirintusban: A szürke kisegér (háromszög alakú test, vonal farok) három billentyűvel irányítható (e=előre, j=jobbra, b=balra, mindig az egér orrához képest). Előrelépésnél a lépéshossz állandó, amit az egér egyenes vonalú egyenletes mozgással 1 sec alatt tesz meg. A fordulás 90 fokos és pillanatszerű. Amennyiben az előrelépésnél a falon átmenne az egér, a teljes ablak piros színnel felvillan 2 másodpercig, és az egér nem mozdul el a kiindulási állapottól. A labirintus falai tetszés szerint téglalapok vagy vonalak. A labirintus végében egy sokszög alakú sárga sajt van. A képen egy másodperc és perc mutatóval ellátott, járó óra is látható, amely akkor áll meg, ha az egér eléri a sajtot.

Valentin napi dobogó szívecske: A virtuális világunk 20cm x 20cm-es négyzetben képzelendő el, amelyben a saját monogramja és egy dobogó szív látható. A háttér szín kék, a monogram fehér, a szív kitöltési színe (nyilván) piros. A vezetéknév Lagrange interpolációs görbe, a keresztnév Bézier görbe, a szív határa Kochanek-Bartels spline. A szívben a tenzió (tension) értéket úgy kell vezérelni, hogy a szív alja és a felső völgyének alja is hegyes legyen (Találós kérdés: miért így ábrázolja az emberiség a szívet?). A szív az alsó csücskét helyben tartva dobog, másodpercenként egyet ver eredeti lineáris méreteit 50 %-kal megnövelve, a két szélső állapota között folyamatosan mozogva. A görbéken és a szív határán egy-egy kitöltött sárga körlap szalad végig, mégpedig úgy, hogy 2 másodperc alatt tegye meg a teljes görbét. A körlap a pálya végén elindul visszafelé. A kameraablak 18cm x 15cm méretű.

Üveg ellipszoid és rézből készült tesszellált, paraméteres felület arany falú csonkakúpban, sugárkövetéssel megjelenítve: A csonkakúp alja diffúz, a teteje hiányzik. A tetőn keresztül az ég látszik, amelynek intenzitása minden hullámhosszon azonos. A réz objektumot egy tetszőleges parametrikus felületből kell származtatni tesszellációval, azaz a felület háromszöghálóval történő közelítésével. A háromszögek száma max. 100 lehet. A csonkakúp belsejében van a virtuális kamera és egy narancs színű pontfényforrás. A kamerát úgy kell beállítani, hogy az üveg és a réz tárgyak teljes szépségükben pompázzanak. A diffúz felületen a lokális illuminációs modell értelmében csak a pontfényforrás hatása érvényesülhet.

Lovag: A színtérben egy textúrázott, megvilágított ember látható (fej, nyak, test, comb, alsó lábszár, felkar, alkar, amelyeket saját programmal tesszellált kvadratikus felületekből lehet összerakni), valamint egy fényes, fémes kard poligonmodellel leírva, textúrázott föld és tetszőlegesen kialakítható textúrázott és megvilágítható tereptárgyak. Az ember a bal és jobb kezében egy-egy pontfényforrást tart, a teret még a nap, mint irányfényforrás és az ég, mint ambiens forrás világítja meg. A kard orientációja kvaternióval adandó meg.

Csiszár PéterMenyhért Ákos

2011. ősz:

Kukac: Készítsen 2D giliszta üldözéses játékot OpenGL-ben. Két játékosunk és gilisztánk van, az egyik giliszta zöld, a másik piros. A giliszták teste szinusz hullám, amelyet vonallal, háromszög vagy négyszög szalaggal lehet felrajzolni. A giliszták feje sokszög. Az egyik játékos célja, hogy a piros giliszta érje utol a zöldet, a másiké, hogy megakadályozza ezt. A giliszták három szinten mozoghatnak, a szintek között a két játékos egy-egy lifttel viheti át őket (Bal lift fel/le = q/a, a jobb lifté pedig o/l). A giliszták gilisztamozgással haladnak előre (nyújtáskor a farkuk vége, összehúzódáskor a fejük mozdulatlan, közben a hosszuk megközelítőleg állandó), és a falnál hátra arcot csinálnak. A giliszta akár egyetlen pontján is képes kapaszkodni, ha viszont egyetlen ponton sem támaszkodhat, leesik és az alsóbb szinten folytatja a mozgását a korábbi irányban. A játék befejeződik, ha valamely gilisztát a lifttel agyonnyomjuk, vagy a piros utoléri a zöldet.

Benkő Dániel

Atléta csiga: Készítsen üde zöld füves versenypályát kb. 4 cm-es 2.5 dimenziós atlétacsigák (Gastropoda Athleta Dimensio II.V) számára! Az atlétacsiga az éticsigával ellentétben bedől a kanyarban, lassításkor előre, fékezéskor hátra hajol, általában a rá ható erő irányába és azzal arányosan dönti a testét. Az atlétacsiga 2.5 dimenziós volta annyit jelent, hogy ugyan 2 dimenziós görbék által kitöltött területekből áll, de a görbék kontrolpontjainak van z koordinátája is, amely alapján a pont elmozdul az x,y síkon az erővel és a z koordinátával arányosan. A test határa zárt Catmull-Rom spline (amiből a vektorizáció konkáv sokszöget hoz létre, melyet fülvágó algoritmussal kell háromszögekre bontani), a szemek határai zárt Bézier görbék, a ház több Catmull-Clark subdivision görbével határolt sokszög. Az atlétacsiga referenciapontja (pivot pont) a referenciahelyzetében az origó, hossztengelye az y tengely (a referenciapont kerül mindig a pálya fölé, és e körül fordul el az atlétacsiga a haladási irányba). A csigát - a saját érdekében – a kontrolpontokon végrehajtott saját skálázással és elforgatással, majd a csúcspontokon glTranslatef függvényekkel kell pályára helyezni. A pálya ugyancsak zárt Catmull-Rom spline, hossza kb. 1 méter, a vezérlőpontokat POINT primitívekkel lehet felrajzolni. A virtuális világban az egységet cm-re kell választani. Az atlétacsiga a pályagörbe paraméterét egyenletesen változtatva mozog a pályán, 5 másodperc alatt ér körbe. Az egér bal gombjának lenyomása a pálya kurzorhoz legközelebbi kontrolpontját a kurzor aktuális helyére mozdítja. A kamera induláskor az egész pályát befogja, a z betű lenyomásával viszont rázoomol a csigára és követi a pályáján. A kamerát a gluOrtho2D függvénnyel kell implementálni. A Catmull-Rom és Catmull-Clark kötelező műsorszám. A fülvágás, Bézier görbe, interaktív pályamódosítás és zoom részfeladatokból mind megpróbálandó, de ezekből kettő lehet hibás is, attól még elfogadjuk a feladatot.

Benkő DánielTher Barnabás

Kausztika hengerben: Készítsen mozgó pont fényforrással megvilágított csendéletet kétirányú sugárkövetéssel. A sugárkövetést a CPU-n kell megvalósítani, a kiszámított és tone-mappelt 600x600 felbontású képet glDrawPixels hívással kell a rasztertárba írni. A színtér egy henger alakú szoba, amelynek fala optikailag sima arany, padlója barna diffúz felület. A szobában három optikailag sima felületű tárgy van, egy poliéder, egy parametrikus felületből tesszellált háromszögháló és egy implicit felület, amelyek közül az egyik üveg, a másik réz, a harmadik pedig ezüst. A tárgyak primitívszáma (háromszögek és kvadratikus felületek száma) max. 100 lehet. A szobát egy izotróp (irányfüggetlen) fehér fényforrás világítja meg, amely 10 másodperc alatt faltól falig vándorol. A fotonlövés fázisában, a beadott változatban ne indítsunk túl sok fotont (pl. max tízezer), azaz a képszintézis ideje az 1 percet ne lépje túl. A diffúz anyagú padlóhoz rendelt fotontérkép felbontása 100x100. Poliéder példák: http://local.wasp.uwa.edu.au/~pbourke/geometry/platonic/ Paraméteres felület példák: http://www.vtk.org/VTK/img/ParametricSurfaces.pdf

Takács Rajmund,  Tősér Attila, Ther Barnabás

Csirkék és az úthenger: Építsen fel egy virtuális világot csirkével és úthengerrel, és jelenítse meg OpenGL környezetben. A virtuális világ elemek: Csirke: paraméteres felületekből (pl. henger, kúp, ellipszoid stb.) álló lábak, test, nyak, fej, szemek, csőr, illetve tetszőlegesen megoldható taraj és farok. A fej a nyakon forgatható, a lábak a csípőben, térben és a lábfejben előre/hátra forgathatók, a térd csirkelábként viselkedik, azaz előre hajlik. A csirke az út szélén várja sorsának beteljesülését. Úthenger: Diffúz/spekuláris fémes csillogású, poliéderekből (pl. téglatest, extrúdált poligon) összerakott karosszériából és textúrázott hengerekből áll. Bónusz: az úthenger kéményén átlátszó, szétfoszló füstcsomókat ereget. Az úthenger az úton áll, felkészülvén a hengerelésre. Füves, lapos, zöld, diffúz terep, amelyen egy textúrázott aszfalt út vezet át. A virtuális világot egy irányfényforrás (a Nap) világítja meg, a csirke és az úthenger a terepre és az útra koromfekete árnyékot vetnek. Ambiens fény van, de az sem világosítja fel az árnyékokat. A virtuális kamerával külső szemlélőként követjük az eseményeket. A textúrák kizárólag procedurálisan generálhatók, óriási, konstansokkal inicializált tömbök használata tilos. Virtuális kamerával külső szemlélőként követjük az eseményeket. Három csirke van, amelyek az út szélén várakoznak, és Játékos I. a 'c' billentyű lenyomására indíthatja őket egyesével. Az elindított csirke átsétál az úttesten, és ha túlélte boldogan ácsorog a túloldalon. A sétálás közben a támaszkodó láb nem csúszkál (inverz kinematika), a test az ízületekben nem szakad szét (karakteranimáció). Ha az úthenger eltapossa (ütközésdetektálás), a csirke kilapítottan az aszfalton marad örök mementóként (ütközésválasz). Játékos II. az úthengert irányítja. Az 'f' billentyűvel az úthengert az orra irányába konstans gyorsulásra bírhatja, a 'b' hatására hátrafelé hasonló nagyságú gyorsulást állíthat be, az 'n' hatására a gyorsulás zérus (fizikai animáció: a sebesség és a pillanatnyi hely a dinamika alaptörvényéből számítandó). A játékban három kamera van, az egyik a csirkék kiindulási helye körül köröz, a második a soron következő, fejét jobbra-balra forgató csirke szemszögéből mutatja be a színteret, a harmadik pedig az úthenger pilótafülkéjéből (a sebességvektor irányában). A három kamera képét három nézetben (viewport) kell megjeleníteni az alkalmazói ablakban. A fényforrás napként viselkedik, 10 másodperces periódusidővel vöröses árnyalattal felkel, fehéren delel, majd vörösesen nyugovóra tér (fényanimáció). Az "inverz kinematika", "fizikai animáció", "ütközés válasz", "több kamerás/nézetes képszintézis" és "fényanimáció" részfeladatokból 2 szükség esetén elhagyható.

Windisch Károly, Benkő DánielÚjvárosi Szabolcs, Németh Szabolcs, Szűcs Tamás, Szabó Rudi, Nagy Attila, Judik Dávid, Víg Beátrix

2012. tavasz:

KK spline: Középfölde királya új görbét talált fel, amit szerénytelenül KK-spline-nak nevezett el. A következőképpen okoskodott: Minden egymás követő három vezérlőpontra egy másodfokú paraméteres görbét illesztünk, így két vezérlőpont között, a legelső és legutolsó párt kivéve, mindig két másodfokú paraméteres görbe látható, amelyek legyenek A és B. Egy másodfokú paraméteres görbe három pontját rendre kezdő, középső és megint kezdő pontnak hívjuk. Két vezérlőpont között az egyik vezérlőpont az A görbének a középső pontja a B görbének pedig a kezdő pontja. A másik vezérlőpont ugyanakkor a B görbének a középső pontja és az A kezdőpontja. A két görbeívből csináljunk egyetlen görbét konvex kombinációval úgy, hogy a középső pontban a másodfokú paraméteres görbe súlya 1, a kezdő, illetve végpontban pedig 0, közöttük pedig lineárisan változik. Középfölde királya szeretné, ha a görbéje kiszorítaná a Catmull-Rom spline-t, ezért Önt kérte meg, hogy egy rajzolóprogramot írjon, demonstrálandó találmánya nagyszerűségét. A rajzolóprogram a világot 0..1000 x 0..1000 mm-es négyzetben tárolja (ez felelne meg Powerpoint-ban a slide-nak), ezen kívül nem lehet rajzolni. Kezdetben a kameraablak bal alsó sarka a világ (100,100) koordinátájú pontjában van, a jobb-felső sarka pedig az (500,500) pontban. A rajzolóprogram az egér bal gomb lenyomására egy-egy újabb kontrollpontot vesz fel. A vezérlőpontok maximális száma 100. A vezérpontokhoz rendelt paraméterértékek tetszőleges olyan növekvő sorozatot alkothatnak, amelyben a növekmény az összes korábbitól különböző (pl. nem jó: 0,1,2,...; jó: 1, 2, 4, 7...). A kontrollpontokra KK-spline-t, és az összehasonlítás érdekében Catmull-Rom spline-t illeszt a program, és a teljes paramétertartományt 1000 részre osztva vektorizál, majd töröttvonalként rajzolja fel a két görbét. A KK-spline piros színben, a Catmull-Rom spline zöldben jelenik meg, ahol takarnák egymást, ott a KK-spline-nak van prioritása. Az egér jobb billentyűjének lenyomásával a görbéket ki lehet választani. Akkor választunk ki egy görbét, ha a vektorizált töröttvonal a kurzor körüli 5x5 pixel méretű négyzetet átmetszi. Ha egyszerre választjuk ki a KK-spline-t és a Catmull-Rom spline-t, akkor a KK-spline-nak van prioritása. Az egér jobb gomb újbóli lenyomása a kiválasztott görbét a két jobb klikk közötti elmozdulásnak megfelelően eltolja. A világba belezoomolni a z betű lenyomásával lehet, amikor a kurzor jelenlegi helye nem mozdul el, de a kamera ablak a zoom előtti mérethez képest tized akkorára esik össze, azaz a világ elemei a korábbihoz képest tízszer nagyobbnak fognak látszódni. Egymás után többször is lehet belezoomolni, amikor egyre nagyobb nagyítás érhető el. A kizoomolás művelet nem kötelező műsorszám, de igény esetén Z betűre megvalósítható.

2012. ősz:

Hansel és Gretel hegyes-völgyes, 10km x 10km-es négyzet alakú, kerítéssel körbevett erdőben rohangál, ahol elvesztették egymást. A legmélyebb völgy tengerszint feletti magassága 250m, a legmagasabb hegycsúcsé 1014m. A terep magasságát tetszőleges differenciálható, egynél több lokális minimummal és maximummal rendelkező függvénnyel definiálhatja, ami célszerűen különbözik a közeli barátok függvényeitől. Az erdő egy véletlenszerűen kiválasztott pontján egy 20 m magas torony tetején mobiltelefon antenna található. Hansel az egér bal gomb lenyomásának helyét, Gretel pedig a jobb gomb lenyomásának helyét célozza meg, újabb egéreseményeknél irányt váltanak, a kerítéshez érve billiárd golyóhoz hasonlóan visszaverődnek. Hansel és Gretel terepmenti sebessége (figyelem, ez nem egyezik meg a felülnézetből észlelt sebességgel) V*(1-M/90), ahol V=1000 m/s a vízszintes talajon elérhető sebesség, M pedig a terep meredeksége fokban (lejtő esetén a meredekség negatív). A világ aktuális állapotát felülnézetből kell megjeleníteni, ahol a terepet szürkeárnyalatos képként ábrázoljuk, a legmagasabb pont fehér, a legalacsonyabb pont fekete, a közbenső magasságok pedig arányosan szürkék. Hansel és Gretel a Mars és a Vénusz jelét kapják, Hansel világoskék, Gretel pedig rózsaszín. A feladat azon pillanatok azonosítása, amikor Gretel mobilozhat Hanselnek, azaz, amikor mindketten rálátnak az antennára. Ekkor a torony, Hansel és Gretel között egy piros háromszöget kell kirajzolni. A fénykép tetején egy progress-bar mutatja, hogy az idő hányad részében tudta elérni Gretel Hanselt. A feladatot diszkrét-idő szimulációval kell megoldani, ahol a mintavételi idő 100 msec.

Bebörtönzött tórusz: Készítsen kétirányú sugárkövető programot, amely egy diffúz barnás téglalap asztalon álló üvegtéglába zárt aranytóruszt jelenít meg. A tórusz az üvegben egy levegőbuborék belsejében helyezkedik el. A buborék választható ellipszoidnak, gömbnek, vagy akár téglatestnek is. A tóruszt geometriailag max 100 db, árnyalónormálokkal ellátott háromszögre kell bontani. A visszaverődési irányok számításánál a lineárisan interpolált árnyalónormállal kell dolgozni. A színteret az egy fehér pontfényforrás világítja meg, amely egy félgömb irányaiban egyenletes sugársűrűséggel világít. A színteret világos színű égbolt veszi közre, amely minden irányban egyenletesen sugárzó fényforrásként viselkedik. A fényforrások teljesítménye tetszőleges, pozitív értékre állítható, a cél, hogy a kép szép legyen. A kausztikus jelenségek kezelése miatt a lövőfázis a pontfényforrásból 10000 sugarat indít, amelyekből a simafelületekkel találkozottak végül az asztalhoz rendelt fotontérképben tárolja. A fotontérképpel indirekten és a fényforrással direkt módon megvilágított színteret sugárkövetéssel fényképezze le. A számított sugársűrűségeket lineáris vagy akár nem lineáris tone-mapping alkalmazásával kell a megjeleníthető dinamikai tartományba konvertálni.

Thaler Benedek, Végh Gábor, Bendefy Zoltán, Keeroy képeslapja

Helikopter háború: Készítsen helikoptert és alatta elterülő tájat. A helikopter (http://hu.wikipedia.org/wiki/Helikopter) háromszöghálóból, ellipszoidből és hengerből összerakott testtel rendelkezik, kétágú, forgatható főrotorja van (egy lapát egy téglatest), és háromágú csak kisebb farok rotorja. A helikoptert a RPY szögeivel lehet kormányozni: R-E a roll, P-O a pitch, Y-X pedig a yaw szöget növeli, illetve csökkenti 20 fokkal. A virtuális kamera a helikopter felett van valamivel és kissé lefele néz, úgy, hogy az optikai tengelye a helikopter közepén átmenjen. A helikopter teste diffúz-spekuláris khaki-színűre van festve, a pilótafülke átlátszó, spekuláris, a forgólapátok szürke spekuláris jellegűek. A helikopter pillanatnyi orientációját a kvaterniójának a megjelenítésével is megmutatjuk. Egy kvaterniót a helikopter közepéből induló piros diffúz-spekuláris nyíllal láttatjuk (nyíl=henger + a végén kúp), amelynek iránya párhuzamos a kvaternió képzetes részének irányával, hossza pedig arányos a valós rész abszolút értékével. Az arányossági tényezőt úgy kell beállítani, hogy 90 fokos elforgatásnál a nyíl kb. kétszer hosszabb legyen a helikopter hosszánál. A tájat egy nagy tesszellált téglalapból kell létrehozni, amelyet procedúrális (!) textúrával látunk el. A tájon elszórt épületek állnak A helikoptert és a tájat a nap (irányfényforrás) és az ég (ambiens fényforrás) világítja meg. A fő és mellékrotor állandó szögsebességgel forog. Az R,P,Y (nagybetűkkel!) szögek a helikopter aktuális koordinátarendszeréhez képest értendők, azaz a helikopter saját magához képest kormányozzuk. A helikoptert két kormányzás között egyenesvonalú egyenletes mozgást végez előre, és egy a helikopterhez gumikötéllel odakötött, léggömbön függő kamerával követjük. A léggömbből adódó felhajtóerő állandó, a légellenállás a sebességgel arányos. A kamera mindig a gumikötés húzásának irányába néz. SPACE billenntyű lenyomására a helikopter egy gumilabdád lő ki, amely a terepen pattog, a "bounciness" 0.9, azaz az ütközéskor a merőleges sebesség abszolút értéke az eredeti 90 százaléka lesz.

Matúz Tamás, Pásztor Balázs, Bendefy Zoltán, Bártfay György, Sűrű BalázsBodnár Dániel, Németh Balázs, Asztalos Dániel, Szedmák Bálint, Mérész Dániel, Pardavi Balázs, Farkas Gábor, Búr Márton, Gönczi Tamás, Hajdu Ákos

2013 tavasz:

Breakout: Készítsen játékot, fejet hajtva a játékfejlesztés úttörői előtt. A 2D squash szobának három oldala van, mérete 40x40 méter. A falak 1 m vastagok. A fehér oldalfalak jól oda vannak betonozva, a piros hátsó fal téglái azonban kiüthetők (a téglák száma megválasztható, de legalább 5 és a tégla területe, és így a tömege a labdáénál nagyobb kell hogy legyen, hogy vissza tudja lökni a labdát). A játékosnak egy 4 m magas, 1m vastag téglalap alakú ütője van, amit az 'i' (föl), 'j' (balra), 'k' (jobbra) és 'm' (le) billentyűkkel mozgathat. A szobában egy 1 m sugarú sárga, köralakú labda pattog, vízszintes kezdősebessége 10 m/s, függőleges kezdősebessége 2 m/s, a falakkal rugalmasan ütközik (energia és impulzus megmarad). Az zöld ütő gyorsítja a labdát, egy ütéstől a mozgási energia 20%-kal nő. Az ütő sarkai le vannak gyalulva, azaz az ütközési normális a sarkon 45 fokos, ami lehetőséget ad arra, hogy az ütő sarkával is odasózzunk a labdának. A hátsó fal téglái az ütközés hatására a fizikai törvényeknek megfelelően kirepülnek. Súrlódás nincs. A szobát felülnézetből látjuk, a 2D kamera a szobán túl még egy 5 méteres sávot is befog. Extra élvezet profiknak: ne csak az impulzus, hanem a perdület is maradjon meg az ütközésnél.

2D editor: A program az egér balgomb lenyomásokat kontrolpontokként értelmezi, amelyekre egy piros Catmull-Rom (CR) spline-t és egy zöld CRI-spline-t is illeszt. A CRI spline interpolációs, a CR-hez hasonlóan harmadfokú és a kontrolpontokban C1 folytonos, másutt C2 (ezen feltételek nem teljesítése automatikus elutasítást von maga után). A CRI sebességvektora az i. kontrolpontban a megelőző és a következő kontrolpontok közötti átmenet átlagos sebessége (p[i+1]-p[i-1])/(t[i+1]-t[i-1]) (széleken megválasztható). A görbék a csomóértékeken közösködnek, amelyek az i. pont esetén t[i]=i+sin(i/5.0)*0.4. A ‘Z’ „zoom”-ol, azaz a kameraablak mérete felére csökken mialatt a közepe helyben marad, a ‘P’ pedig „pan”-nel, azaz a kameraablak a vízszintes méretének 10%-val balra, függőleges méretének 20%-val felfelé mozdul el. A két görbén egymással szemben periódikusan egy-egy nyíl szalad, a kezdőpontja a görbe adott időponthoz (sec-ben) tartozó pontja, egyébként pedig a sebességvektor skalárszorosa (látható legyen a képen).

Piros-fehéres abroszon álló teli söröspoharat sugárkövetéssel: A színtérfelépítéséhez kizárólag általános kvadratikus felületeket (4x4-es szimmetrikus mátrixot), féltereket és halmazműveleteket használhat. A söröspohár a talpával stabilan áll az abroszon. Feltételezheti, hogy a látható tartomány minden hullámhosszán az üveg törésmutatója 1.5, a söré pedig 1.3. Az üveg és a sör hullámhossz függő hatáskeresztmetszetét "méréssel" állapítsa meg közelítőleg (figyelem, dimenzió)! A csendéletet világoskék ég és egy intenzív sárgás pontfényforrás világítja meg. A kamerát úgy kell felvenni, hogy az abrosz egy része és a söröspohár teljes szépségében pompázzon. Örömmel fogadjuk, ha a sörben levegőbuborék vannak, az abroszon pedig kausztika, de ezek nem kötelezők.

Csempézett szoba, fókával és labdával: A padló textúrázott, diffúz/spekuláris csempe jellegű anyag. A fóka teste szabadformájú paraméteres felület (pl. Largange interpolációs felület, Bézier felület, nem klasszikus felület paraméteres formában), nem texúrázott, fekete, de spekulárisan csillogó. A fókának két szeme van, amelyeket forgathat, de a szemgolyók nem ugranak ki a szemgödörből. A strandlabda textúrázott és illuminált sárga-piros csíkos gömb. A szobában legalább egy pont vagy irányforrás világít (lehet több is). Az 'f' billentyűvel a kamerát egy lépéssel előre, a 'b'-vel pedig hátra vihetjük. A fókába tegyen egy csontvázat (legalább két csont) és az ízületben végrehajtott elforgatást kösse az 's' (balra), 'd' (jobbra), 'e' (fel), 'x' (le) billentyűkre. Az 'a'-ra a fóka kicsit előrecsúszik, 'y'-ra hátra. A csontvázhoz kösse a fóka tesszellált bőrét (rigid binding), mégpedig úgy, hogy egy csúcsponthoz a legközelebbi csont tartozzon. A bőr követi a csontot, azaz elszenvedi annak transzformációját. A fókának fejelgetnie kell, azaz úgy kell irányítani a fókát, hogy a labda fején pattogjon. Az ütközésdetektáláshoz a fóka fejét közelítheti gömbbel. Az ütközés rugalmas, a fókafej sebessége a labda sebességéhez képest elhanyagolható. Kezdetben a labda éppen a fóka feje fölött van. A fóka két szeme mindig a labdára szegeződik.

2013. ősz:

Angry birds: Készítsen "Kaksiulotteisia vihaisia lintuja" programot, amelyben egy piros és egy zöld madár szerepel, valamint világos zöld talaj, a talajból kiálló tetszőleges színű kétágú csúzli, amely fekete színű széles gumival fogja körbe a kilövendő piros madarat. A csúzli tára, ahol a piros madár várja a sorsa beteljesülését, a 600x600 felbontású alkalmazói ablak bal felső sarkához képest 200 pixellel jobbra és 400 pixellel lejjebb van. A madarak teste, szeme és szemgolyója ellipszis (nem kör!), csőrük, farktollaik és szemöldökeik háromszögek. Szárny és bóbita opcionális. A zöld madár fel-le repked akár szárnyak nélkül is, magassága az időben szinuszosan változik az ütközésig. A piros madarat csúzliból lehet kilőni a fizikai törvényeknek megfelelően, a csúzli rugóenergiáját teljes mértékben átveszi a madár induláskor. A kilövés folyamat azzal kezdődik, hogy az egér bal gombjának lenyomásával a madár ellipszis alakú testének belsejébe klikkelünk, amikor a madár a kurzorhoz ragad és követi az kurzor mozgását az egérgomb elengedéséig. A csúzli gumija végig szorosan feszül a madár fenekére. Amikor elengedjük a bal gombot a piros madarat is útjára bocsátjuk, azaz kirepül a csúzliból. Perdülettel és forgással nem kell foglalkozni. A piros madárra reptében a nehézségi erő hat, közegellenállás és felhajtóerő (nincs szárnya, amivel csapkodna) pedig nincs. Ha a piros és a zöld madár ellipszis teste ütközik (figyelem, két ellipszis ütközését pontosan kell számítani), mindketten megállnak a levegőben és a piros madár sárgává változik. Ha a piros madár kirepül a látható tartományból, automatikusan születik egy új a csúzliban fejjel lefelé a két ág "között".

Kvadratikus felületek: Készítsen négyhengeres sugárkövető programot. Az 1. henger tartalmazza a teljes színteret, fala optikailag sima arany, alapja megválasztható színű diffúz, teteje hiányzik, amin a fehér égbolt világít be (ezt úgy lehet figyelembe venni, hogy azok a sugarak, amelyek kilépnek a hengerből ilyen sugársűrűséggel térnek vissza). A többi henger az 1. belsejében van, tengelyük sem egymással, sem bármelyik koordinátatengellyel nem párhuzamos. A 2. anyaga optikailag sima ezüst, a 3. anyaga optikailag sima réz, a 4. anyaga optikailag sima üveg, gyémánt vagy megválasztható színű diffúz lehet. Az homogén égbolton kívül még egy vagy több optikailag sima ezüst forgásparaboloid reflektorú, nem a fókuszba helyezett pontszerű fényforrás világítja meg a teret. A kamerát úgy kell elhelyezni, hogy a hengerek láthatók legyenek. Fotontérképet nyilván csak a diffúz felületekhez kell rendelni az optikailag sima felületekhez nem. A fotonok számát úgy kell beállítani, hogy a program 1 percen belül 1 CPU magon lefusson (ha ezt az időt túllépi, a fotonszámot érdemes csökkenteni, pl. úgy, hogy ne legyen 10^4-nél lényegesen nagyobb, de a nem lépi túl, akkor lehet több fotonnal is dolgozni). A fotontérkép felbontását pedig úgy kell meghatározni, hogy a kausztika az adott fotonszám mellett sima legyen.

Jánoky László ViktorPap Ákos, Kozma Tamás, Marosi Gergely, Fábián András

Gólya és a békák: Készítsen OpenGL programot, amely egy (fekete foltos textúrájú), de alapvetően fehér diffúz+spekuláris testű Szalámi Gólyát és zöld diffúz+erősen spekuláris testű (nyálkás) Ellipszoid Békákat jelenít meg diffúz, textúrázott terepen. A Szalámi Gólya onnan ismerszik meg, hogy ha testét a Catmull-Rom spline vázára merőlegesen bárhol kettészeljük, akkor a metszet kör alakú (a váz definíciója: ha a Szalámi Gólya testének minden felületi pontját egyszerre gyújtjuk meg, akkor a tűzfrontok a vázban találkoznak). A kör sugara a váz mentén változik, amelyet egy másik Catmull-Rom spline-nal kell megadni. A gólyának és a békáknak is két-két szemük van, a gólyának még piros kúp alakú csőre és két gólyalába van (amelyek biológiai ismereteink szerint, a mi lábunkkal ellentétben, térdben előre és nem visszafelé hajlíthatók). A gólya arányai olyanok, hogy előrehajolva a csőrének végével elérné a talajt. Az Ellipszoid Békák testrészei ellipszoidok. A terep textúrázott, nem szükségképpen sík. Tereptárgyak tetszés szerint megválaszthatók. A színteret a nap (irányfényforrás) az ég (ambiens fényforrás) és egy energiától duzzadó szentjános bogár (pontfényforrás) világítja meg. A gólya lépeget előre 1 lépés/sec sebességgel. A támaszkodó láb nem csúszkál (inverz kinematika). A ‘J’ billentyű lenyomására 0.5 sec alatt 10 fokot jobbra fordul célszerűen a támaszkodó láb körül, hasonlóan a ‘B’ billentyű lenyomására balra. A SPACE hatására a nyakát előrehajtva lecsap és ha békatestet talál (végtagok nem számítanak), akkor a béka eltűnik. A gólyát csontváz animációval kell mozgatni, a lábrészek és a nyak hossza nem változhat a mozgás során. A láb részei tekinthetők merev testnek, de a gólyatest nem, így azt a csontvázra "bőrözni" kell. A békák merev testként akár véletlen irányokba ugrálhatnak, de két ugrás között 1 sec rákészülési időre van szükségük. A terepet illetően két lehetőség közül lehet választani. Az elsőben a terep sík és akkor a testeknek van árnyékuk rajta, amit a nap vet (síkra vetített árnyék algoritmus). A másik lehetőség, hogy a terep nem sík.

Török László, Gazsi Gábor, Marosi Gergely, Fábian András, Balogh Tamás, Kassai Dániel,

2014. tavasz:

Bicikli katlan: Goretity Dániel, Bartha Imre,  Sükein Alex, Hegedüs Gábor, Nagy BélaSarmasági Györk

2014. ősz:

Síkon táncoló kontrollpontok: A felhasználó az egér balgomb egyszeri lenyomással/elengedéssel veszi fel a kontrollpontokat (max 10-et), amelyekhez 2cm sugarú kisebb fekete köröket rendelünk. Ha a kontrollpontok száma legalább kettő, azokra egy türkiszkék színű, kitöltött konvex burkot, piros Bézier görbét, nulla kezdő és végsebességű, a kontrollpont lehelyezésének idejét paraméterként használó zöld Catmull-Rom spline-t és kék Catmull-Clark görbét illeszt. A háttér világosszürke. Legnagyobb prioritása a kontrollpontoknak van, majd a görbék jönnek, végül jön a konvex burok. Space lenyomására a kontrollpontok egy-egy 5 cm-es kör tetejéről elindulva, 5 másodpercenként egy teljes fordulatot téve, elkezdenek keringeni, mégpedig a páros indexűek az óramutató járásával megegyező, a páratlan indexűek pedig azzal ellentétes irányban. A konvex burok és a görbék követik a kontrollpontokat. Mindezt a felhasználó egy 58cm x 68 cm-es kameraablakon keresztül látja. Ha a felhasználó az egér jobb gombbal rábök egy kontrollpontra, akkor a kameraablakot ehhez köti, a kontrollpont elmozdulása automatikusan a kameraablakot is arrébb viszi.

Kaktusztok: Készítsen csendéletet, ahol procedurálisan textúrázott, diffúz+Blinn spekuláris asztalon optikailag sima tárgyak, egy ellipszoid aranykaktusz, egy paraboloid ezüstkaktusz és egy henger üvegkaktusz áll (a háromból min. kettő megvalósítása szükséges). A kaktuszoktörzséből a törzzsel hasonló, de kisebb részek nőnek ki, mindig a felületre merőlegesen, legalább két további szinten (az összes részek számát úgy kell megválasztani, hogy a program 1 percen belül lefusson). A kinövő részek véletlenszerűen, nagyjából egyenletesen oszlanak el a felületen. A teret egy zöldes, egy kékes, és egy pirosas pontfényforrás világítja meg, a megvilágítási intenzitás a távolság négyzetével csökken. Az égbolt világoskék. Árnyékok vannak. A kamera az asztal fölött van és enyhén lefelé néz. A sugár-objektum metszéspontot és a normálvektort a metszéspontban analitikusan kell számolni.

Szilágyi Gábor, Marosi Csaba, Garancsy Áron, Török Attila, Bordács Gergő, Czentye Bence Levente, Hegedüs Péter,   Komáromi BalázsAndrónyi Eszter, Soltész Andrián, Kohlmann András, Antal János Benjámin, Boczán Tamás, Bartha Péter

Műhold befogás: Készítsen szimulátort műhold befogáshoz a Мир űrállomás számára! A fényforrás a távoli nap. Az űrállomás a csillagos égbolt előtt, egy diffúz, procedurálisan textúrázott bolygó körül kering, pályája nem geostracionárius. A bolygót átlátszó kékes légkör veszi körül. Az űrállomás teste fémes csillogású forgástest, a sziluett Catmull-Rom spline-nal adandó meg. Az űrállomáson van egy nagyjából kör alakú lyuk. Az űrállomáshoz legalább két napelem tábla tartozik. Az űrállomás egy, a fő tehetetlenségi iránytól különböző tengely körül lassan forog. Az avatárunk éppen űrsétát végez, magát az űrállomáshoz kötve egy hosszú gumikötél végén rángatózva. A gumikötél csak egy adott távolság után feszül meg, azon túl Hooke törvény szerint nyúlik. Az űrállomástól nem zérus sebességgel rúgtuk el magunkat. Avatárunk tömege az űrállomás tömegénél sokkal kisebb. Az avatár mindig az űrállomás nyílása felé néz. A mesterséges hold gömb alakú, amiből legalább három henger vagy kúp alakú fúvóka nyúlik ki (bónusz: ha a fúvókák tengelye nem megy át a súlyponton, akkor a forgását is szabályozhatjuk). Kezdetben a műhold az űrállomáshoz képest lassan halad és forog. A műhold ugyancsak diffúz-spekuláris, a fúvókák színe alapján vezérelhetjük őket. Ha a q, w, ... billentyűket lenyomjuk, a betűhöz rendelt fúvókán egy lángnyelv tör ki, a műhold pedig ellentétes irányú I impulzust kap. A lendület és perdület, mint mindig, itt is megmarad. A játék célja, hogy a mesterséges hold az űrállomás nyílásán besétáljon.

Marosi Csaba

2015. tavasz:

Renner spline: Készítsen elől-felül-oldalnézetes ortografikus 3D Renner spline görbeszerkesztőt, amelyben a pálya menti sebesség közelítőleg 1 m/sec. A 600x600 pixel felbontású alkalmazói ablak négy egyenlő részre van osztva, amelyekben az elől, felül és oldalnézetek látható, egy negyed pedig üres. A világ 3m x 3m x 3m-res kocka, amelynek középpontjában vettük fel az origót. A nézetekben a teljes világ vetületei látszanak, az origó értelemszerűen középen van. A transzformációkat „kézzel” kell számítani, az OpenGL mátrixok most még nem alkalmazhatók. Amíg még nincs görbénk, az egyik nézetbeli egérkattintások kontrolpontokat vesznek fel, úgy, hogy a nézetre merőleges koordináta zérus. A további nézetekbe kattintva az ott legközelebbinek talált kontrollpont áthelyezhető, a nézetre merőleges koordináta változatlanul hagyásával. A pillanatnyi állapotot minden nézetben jelezni kell, a kontrolpontokat sárga körökkel, a 3D Renner spline-t pedig a fehéren rajzolt 2D merőleges vetületeivel. A SPACE lenyomására egy kör indul el a görbe kezdőpontjából és a sebességvektorát farokként maga után húzva, kb. 1 m/sec pályamenti sebességgel végigcsúszik a görbén.

Fekete lyuk: Készítsen sugárkövető programot, amely 100 mm oldalhosszúságú, egyik oldalán nyitott dobozban lévő durván tesszellált, optikailag sima, tükröző arany tóruszt, és egy Schwarzschild típusú (azaz töltés nélküli és nem forgó) Föld tömegű fekete lyukat tartalmaz. A doboz oldalai diffúz+spekuláris visszaverődésűek, a diffúz tag procedúrálisan textúrázott. A színteret ambiensfény és legalább egy pontfényforrás világítja meg. Élhet azzal az egyszerűsítéssel, hogy a fekete lyuk a fényt csak az első visszaverődés után görbíti, azaz a pont fényforrás és a megvilágított felület között nem, de a rücskös és sima felületek között, valamint a felületek és a szem között igen (a másik alternatíva a fényforrásból kilépő fény görbítésére a fotontérkép módszer). A fény elgörbülését kellő tudásszomj esetén Einstein téregyenletének Schwarzschildtól származó megoldásával, egyébként pedig az ekvivalenciaelv és a klasszikus newtoni gravitációs formula felhasználásával, sugármasírozással kell szimulálni. A rendelkezésre álló CPU idő 120 sec, szükség esetén kisebb bontású kép átmintavételezésével, távolságtól függő lépés-nagysággal és befoglaló térfogatokkal lehet a programot gyorsítani. A szükséges fizikai állandók: A fény sebessége: 300 000 km/sec; A föld kerülete: 40 000 km; A nehézségi gyorsulás a föld felszínén: 10 m/sec^2.

Leskó András, Oláh Barnabás, Nagy Gábor, Horti Norbert, Nótai István, Nagy Máté, Demeter Péter, Mezei Adrián

Pigvin: Készítsen pingvin (Pygoscelis antarcticus) szimulátort. A pingvin teste a Geometriai modellezés diasor 25. diáján szereplő felosztási séma szerinti Catmull-Clark felosztott felület, amit négyszög hálóból minimum egy, de a teljes megoldáshoz legalább két lépéssel kell felosztani. A teljes megoldásban a 40. dián lévő half-edge adatstruktúrában kell a geometriát tárolni. A pingvin teste texúrázott, diffúz, a textúrakoordinátákat hengerkoordinátákból kell számítani (hengeres vetítés). A textúra maga procedurális. A pingvinnnek még két szeme van, csőre és két mozgatható merev vagy több ízületből összerakott lába van, amit felosztott felülettel vagy paraméteres felületekből kell kialakítani. A havas terepen diffúz/spekuláris tojások vannak. Az avatár pinvginünket W=jobbra fordul, E=előre lép, R=balra fordul, SPACE=leül billentyűkkel lehet irányítani. Ha a pingvin 3 másodpercet ül egy tojáson, akkor a tojás kikel és egy újabb pingvin születik azon a helyen, amely őseihez hasonlóan rohan tojásokat kikelteni. A kamera az avatár pingvinre néz mindig, de poziciója állandó. A nap, lévén, hogy a Déli sarok közelébe vagyunk, lapos szögbe világítja meg a sík tájat, tojásokat és pingvineket. A síkon, síkra vetített árnyékok láthatók, amelyek feketék.

Kővári András, Leskó AndrásBátor András, Bene Máté, Misinszki Rita, He Sheng Hai, Bugár Tamás, Mezei Andrián

2015. ősz:

Catmull: Adott egy 1000m x 1000m-res mező, amelyet kezdetben a teljes viewport-ban látunk. Az egér bal gomb lenyomásával pontokat helyezünk el a mezőn. A pontokat piros belsejű, fehér körvonalú 5m sugarú körrel jelenítjük meg. Egyrészt a pontok egy fehér, önmagában zárt Catmull-Rom spline kontrollpontjai, amelyekhez tartozó időparaméter a lenyomáskori óra állás. Másrészt az első két pont egy egyenest definiál, a harmadik pedig egy fókusz pontot. A egyenes és fókuszpont által kijelölt parabola a síkot két részre osztja. A parabola fókuszpontot tartalmazó részében a hátteret sárgára, a másik részben türkizre színezzük ki. A Catmull-Rom spline és a parabola egyik metszéspontjában (már ha van) zöld színnel érintő egyenest rajzolunk mind a parabolához, mind pedig a spline-hoz. A SPACE lenyomásának hatására a kamera ablak 500m x 500m-resre megy össze úgy, hogy a középpontja helyben marad. Ezután (2m/sec,3m/sec) kezdeti sebességgel vándorútra indul. Ha a kameraablak ütközik a mező szélével, onnan biliárd golyó módjára verődik vissza. Minden, a feladat szövege által nem specifikált részlet szabadon megválasztható.

1 m/s sebességű fény: Készítsen sugárkövető programot, amely egy szobát és az abban mozgó üveg ellipszoidot jelenít meg mozgó pontszerű fényforrás megvilágítása mellett. A virtuális világban a fény terjedési sebessége 1 m/s!!! (ezen feltételt mellőző megoldások nem fogadhatók el) A szoba egyik oldala aranyból van, optikailag sima és forgásparaboloid geometriájú. A szoba többi oldala diffúz és valamilyen mintával textúrázott sík. A szoba mérete 10 m x 10 m x 10 m volna, ha eltekintenénk a paraboloid kitüremkedésétől. Az üveg ellipszoid tengelyei a világkoordinátarendszer egyik tengelyével sem párhuzamosak. A leghosszabb tengely 2 m, a legrövidebb 0.5 m. Az ellipszoid egyenes vonalú egyenletes mozgást véget a szoba sarkából 0.5 m/sec sebességgel úgy, hogy legalább 10 másodpercig a szoba belsejében tartózkodik, mialatt a kamerából látható. A pont fényforrás ugyancsak egyenesvonalú egyenletes mozgást végez úgy, hogy az első 10 másodpercben a szoba beljesében van. A programnak a SPACE lenyomásának időpontjában keletkezett képet kell megjelenítenie.

Veres DánielVégh Balázs Gergely, Long Thran, Szalontai Zoltán, Desztics ArmandTamás Kristóf

Csirguru: A csirguru a csirke és a kenguru nászából született jószág, csirke teste, csőre, szemei, taraja van, valamint egy lába, amivel kenguruszerűen ugrál. A lába a csípőízületben nem fordul el, a térízületben hátra fordul, a bokában előre (amit a normál csirke esetében hajlamosak vagyunk előre hajló térdnek hinni). Az egy szem lábujj ugyancsak felfelé hajlítható, az ízületek tengelyei egymással párhuzamosak. A csirguruk testét néhány zárt Bézier görbével definiált keresztmetszetek Catmull-Rom spline-t alkalmazó transzfinit interpolációjával kell létrehozni. A szem, csör, taraj, lábrészek ismert egyenletű paraméteres felületekből (pl. gömb, kúp, henger, paraboloid stb.) összerakhatók. A csirguruk egy sík, textúrázott és megvilágított terepen a bomba aktuális helye alatt, a program indításától számított másodpercenként születnek meg, majd elkezdenek ugrándozni. A lendületvételi fázisban a csirguru feneke a földhöz közelít, majd a térdízület EGYENES VONALÚ GYORSULÓ MOZGÁST (inverz kinematika) végez, mialatt a lábujj a talajon marad, a térd pedig vízszintesen tartja a csirgurut. A bokaízület kiegyenesedése pillantában a csirguru elszakad a földtől és lendületvétel végén elért kezdősebességű ferde hajítással leírható pályán ugrik, a levegőben előreteszi a lábát, a földetérkezésnél pedig a lendületvételt visszafelé játsza le. Az ugrálást ismételgetheti, az egyes ugrálások között a haladási irányát ízlésesen változtatva. A felhasználó egy bombát irányíthat a mező fölött egy síkban az A, W, D, Y billentyűkkel, majd SPACE-re a bomba leesik. Ha a bomba egy csirguru közelében esik le, a csirguru testrészei független ferde hajítást követnek, mialatt midegyik testrész egy-egy forgástengely körül forog. A színteret egy irányfényforrás (nap) és ambiens fényforrás világítja meg, a csirguruk és a bombák a talajra árnyékot (síkra vetített árnyék algoritmus) vetnek.

Bácsi Gábor, Tóth Szilveszter, Czipó Bence, Long Tran, Major Dávid, Bán ViktorHadur Zoltán, Urbanovics Péter, Takács Bendegúz, Nagy Árpád Péter, Szommer András, Urbanovics Simon

2016. tavasz:

Medence: Déri Tamás

Tóruszba zárt Spiderman: Kormány Zsolt, Jóna Kata,

2016. ősz:

Repülőgép forgalomirányítás: Fekete háttér előtt a gömb alakú, 0.2 1/sec fordulatszámmal forgó, 40 ezer km kerületű földet látjuk a képernyőn, amelynek sziluettjét fehérrel, 30 fokonként a hosszúsági és szélességi köreit szürkével rajzoljuk fel. A virtuális kameránk merőleges vetítést használ, a megjelenítés huzalváz jellegű. Egérrel a bal gombbal ráklikkelve a föld elülső felületére repülőgépeket indíthatunk és azok útvonalát jelölhetjük ki egészen addig, amíg a jobb gombbal a célállomást megadjuk. A kiindulási reptér, közbenső pontok és a célreptér között a repülő a legrövidebb úton halad 10 km magasságban, állandó 5 ezer km/sec sebességgel (SLERP). A repülő az orrát követi, a szárnyai pedig a gravitáció irányára merőlegesek. A repülési pályát piros vonal mutatja. A repülőt Catmull-Rom spline-nal definiált zöld színű kitöltött konkáv területtel jelenítjük meg, nyilván irreálisan felnagyítva, hogy látszódjon a képernyőn. A célállomásra érve a repülő és a pályáját jelző vörös vonal eltűnik.

Tóth Ervin

2017. tavasz:

Kerékpár pályatervező: Készítsen hegyi kerékpárpálya tervezőt, amely felülnézetben, merőleges vetülettel mutatja a pályát és környékét! A terepet Bézier felülettel adjuk meg. A kontrollpontok xy vetületei szabályos N x N-es (N > 3) 2D rácsot alkotnak az 1km x 1km tartományban. A tervezőprogramban a magasságot térképszerű, de megválasztható színkódolással kell bemutatni (például de nem kötelezően: alacsony zöld, magasabb világosbarna, magas sötétbarna). A színkódoláshoz a magasságot 50 méterenként kell kiértékelni, a mintapontok között a szín lineárisan változik. A tervező a bal egérgomb lenyomásokkal a terepre vetíti a pálya kontrollpontjait, amelyet a program fehér Lagrange interpolációs görbével köt össze és printf-fel kiírja az aktuális pálya hosszát. SPACE lenyomására egy alkalmas színű nyílszerű konkáv poligonnal ábrázolt virtuális biciklista indul el a pályán a nyilat mindig a haladási irányba állítva. A haladási irány 3D-ben analitikusan (nem pedig közelítő differenciahányadossal) számítandó. A biciklista a két kontrollpont között pontosan annyi időt tölt el, amennyi a két gomblenyomás között eltelt. A pálya meredekségét a képernyőn tetszőleges helyen elhelyezett derékszögű háromszöggel szemléltesse, amelynek az emelkedési szög az egyik szöge, és állása mutatja, hogy emelkedővel küzd-e a kerékpáros vagy lejtőn gurul lefelé.

Tóth Ervin

Hengermánia: Egy optikailag sima arany (n/k: 0.17/3.1, 0.35/2.7, 1.5/1.9 az r,g,b hullámhosszokon) anyagú 3 m sugarú henger falú és textúrázott rücskös, diffúz-spekuláris padló/plafonú szobában további, kisebb sugarú hengerek találhatók:

1. Optikailag sima ezüst (n/k: 0.14/4.1, 0.16/2.3, 0.13/3.1)

2. Optikailag sima üveg: (n/k: 1.5/0, 1.5/0, 1.5/0; sigma: 0.1, 0.1, 0.1 m-1)

3. Optikailag sima sör: (n/k: 1.33/0, 1.33/0, 1.33/0; sigma: 0.1, 0.1, 0.5 m-1), amelyben gömb alakú levegőbuborékok vannak.

4. Inhomogén füst, ahol a hatáskeresztmetszet pontról pontra változik és megválasztandó. A füst csak elnyelheti a fotonokat, irányukat nem változtatja meg.

5. Rücskös, textúrázott, diffúz-spekuláris, ahol a textúra megválasztandó.

Semelyik két henger sem lehet párhuzamos, a hosszuk tetszés szerint megválaszt-ható, akár végtelennek tekinthető. A kamera a hengerszoba belsejében van, ahol három pontfényforrás is világít, amelyek színe és intenzitása megválasztható. Egyetlen képet kell sugárkövetéssel kiszámítani és azt a képernyőn megjeleníteni.

Fehér Balázs, Tamás Csongor, Tóth Péter,  Oláh Gergely, Bartha BálintJuhos Attila

Táncoló kígyók:  Készítsen játékot, amelyben vadul rángatózó kígyók (legalább két Crotalus durissus) lógnak egy palló felett, mi pedig az avatárunkat a pallón szeretnénk átvezetni anélkül, hogy a kígyók megmarnák, azaz az avatárunk befoglaló gömbje és a kígyó fejének befoglaló gömbje egymásba lógna. A kígyó teste kihúzott (extrúdált) felület, a gerincgörbe Catmull-Rom, a profilgörbe kör. A kígyó mozgását a Catmull-Rom görbe kontroll pontjainak egy-egy tetszőleges zárt görbén való végigvezetésével érjük el. A fej ellipszoid. Tetszés szerint szem és nyelv is képezhető. A palló alatt homok található, amely procedurális magasságmező (explicit felület). A kígyó és a palló diffúz komponense textúrázott, a kígyó ezenkívül jelentős spekuláris komponenssel bír a nyálkás hatás kedvéért. A textúrákat procedurálisan a CPU-n kell előállítani reakciós-diffúziós rendszerként (lásd web, pl. http://www.karlsims.com/rd.html). A GPU-t Phong (per-pixel) árnyalással kell működtetni. Az avatárunk a SPACE billentyűre lép előre.

Tamás Csongor , Komlós Boldizsár

2017. ősz

Repülőgép útvonaltervező tóruszlényeknek: Készítsen három pontos útvonaltervező programot, azaz háromszög szerkesztőt tóruszlényeknek, akik egy tórusz alakú bolygón élnek. A térképen egy pont azonosítására általában az u,v koordinátákat használják. A tóruszvilág véges, tehát ha az u,v kifut egy maximális intervallumból, akkor a már látott pontok újból előjönnek. A térképen két (nagyon) közeli pont távolságát úgy lehet kiszámítani, hogy veszik az 3D tórusznak a megfelelő pontjait, és ott euklideszi távolságot határoznak meg. Megállapították, hogy a fenti távolság csak közeli pontokra igaz, és a legrövidebb utak általában nem egyenesek (ahogy a föld térképen sem egyenesek a legrövidebb utak). A készítendő program a tóruszlények térképének három kattintással bevitt pontjaira egy háromszög éleit rajzolja ki fehérrel. A program háttérként a felszín Gauss görbületét mutatja be, a pozitív értékeket pirossal, a negatívokat zölddel. A háromszög oldalai (nem euklideszi) egyenesek, azaz az adott geometriában a legrövidebb utak. Az utakat közelíthetjük másodfokú függvényekkel, pl. három kontrollpontos Bézier görbével. A háromszög szögeinek összegét printf-fel írja ki a sztenderd outputra.

Hengerszoba: A specifikációban nem rögzített tulajdonságok szabadon megválaszthatók. Egy véges magasságú, diffúz + spekuláris textúrázott henger belsejében szemlélődünk. A henger alakú szoba a látóterünkben még három optikailag sima, egymásba fonódó, darabonként max 50 háromszögre tesszellált, azaz „baltával faragott” tóruszt tartalmaz, az egyik arany, a másik üveg, a harmadik pedig ezüstből van. A tóruszok tengelyei nem párhuzamosak semelyik koordinátatengellyel. A színteret három, nem fehér fényforrás világítja meg és ambiens fény is észlelhető. A fényt tekintse polarizálatlannak, a Fresnel függvényt pedig tilos közelíteni. Számítsa ki a látható képet sugárkövetéssel és jelenítse meg a képernyőn egy textúrázott téglalapként. Az anyagtulajdonságok az R,G,B hullámhosszain: Optikailag sima arany (n/k: 0.17/3.1, 0.35/2.7, 1.5/1.9 ) Optikailag sima üveg: (n/k: 1.5/0, 1.5/0, 1.5/0) Optikailag sima ezüst (n/k: 0.14/4.1, 0.16/2.3, 0.13/3.1) A szoba textúrája és diffúz/ambiens visszaverési együtthatói szabadon megválaszthatók. A fényforrások helye és intenzitása úgy választandó, hogy a kép szép és élvezhető legyen.

Ciklois: Nyúton Iszák II. éves hallgató azt a feladatot kapta, hogy határozza meg, hogy milyen alakú az a lejtő, amin legkisebb idő alatt legurul egy tórusz. Segítsen Iszáknak! Építsen fel virtuális világot, amelyben a lejtő Lagrange interpolációs görbével vagy Catmull-Rom spline-nal definiált (legalább 3 kontrollponttal). A képernyő oldalnézetből, merőleges (!) vetítéssel mutatja a lejtőt, rajta a tóruszt. A rögzített kezdő és végpont mellett egérkattintással lehet felvenni a spline belső kontrollpontját (a végek rögzítettek). A legurult tórusz visszateleportál a lejtő telejére és újra kezdi a mozgást. Tórusz ugratástól el lehet tekinteni. A lejtők és a tórusz textúrázottak, diffúz-spekuláris modell szerint verik vissza a fényt. A színteret egy irány és 2 pontfényforrás világítja meg és Phong (per-pixel) árnyalással kell megjeleníteni a GPU-val. A nehézségi gyorsulást úgy kell beállítani, hogy kb. 3 másodperc alatt a tórusz a lejtő aljára érjen. A fizikai szimulációnál feltételezheti, hogy a tórusz görbületei mellett a lejtő görbülete elhanyagolható.

2018. tavasz:

Pillangó: Készítsen virágokra szálló pillangó programot. A lapos pillangó (Lepidoptera Plana) teste ellipszis, szárnyai ízlés szerint Lagrange, Bézier, Catmull-Rom vagy Catmull-Clark görbe. A pillangó a sík föld felett repül, amelyen a Fibonacci sorozat számú szirommal rendelkező virágok nyílnak. A pillangó szárnyai textúrázottak, a színek ellipszis, parabola vagy hiperbola görbék mentén váltanak. A pillangó csapdos szárnyaival, a feje után repül, bedől a kanyarban és légellenállás fékezi. A pillangót virtuális rugóval irányíthatjuk, azaz a bal-egérgomb lenyomásával egy virtuális rugó keletkezik a pillangó és a kurzor között, amely a Hook törvény szerinti erőt gyakorol a pillangóra egészen az egérgomb elengedéséig. A virtuális világot felülről, merőleges vetítéssel fényképezzük le. A specifikációban nem rögzített tulajdonságok szabadon megválaszthatók.

Tóth Ervin

Pszichológia halaknak: A XX. század egy híres állatvédője (+ festő és író, bár amatőr író riválisával szemben nem kapott irodalmi Nobel díjat) betiltatta a gömb és általában a nem sík oldalú akváriumot, mert szerinte az így torzított világ negatívan hat a halak lelkivilágára. Készítsünk szimulációs programot a probléma vizsgálatára. Az akvárium téglatest és paraboloid lehet, amely minden esetben textúrázott falú szobában van. A szobában még legalább egy kvadratikus egyenletű, aranyból készült, optikailag sima felületű test van, amely nem gömb. A viewport-ot négy részre kell osztani, amiben négy feleakkora képet kell tenni, amelyek a téglatest és paraboloid akváriumokat, valamint a normál kamera és a halszemoptika hatását hasonlítják össze. A halszemoptika teljes 360 fokos képet érzékel, amit a gömbi koordináták segítségével képernyő négyzetére kell leképezni.

Varnyú Dóra, Dilong Sándor, Hübner Krisztián

Formula I Möbius szalagon: Textúrázott, helyenként lyukas Möbius szalagon diffúz textúrázott + spekuláris tóruszok (igény esetén henger, gömb is) alakú járművek gurulnak, illetve globális objektum(ok) (pl. égbolt) látható. Az avatárunk madártávlatból szemlélődik, majd SPACE-re a Möbius szalagra ugrik és a forgalommal szemben kezd vágtatni. A haladási irányba néző és a szalag síkjára merőleges állású avatárunkat a többiekkel szemben kell vezetnünk, amelyet a p lenyomásával jobbra, a w lenyomásával balra ugrathatunk. A megjelenítést Phong (per-pixel) árnyalással kell megcsinálni.

Szörfi Jázmin, Tomcsányi Gergely, Ács Bendegúz, Ponekker Patrik, Pünkösd Marcell, Frey BalázsTóth Ervin

2018. ősz

Roller coaster:

Tóth Ervin

2019. tavasz:

Monocycle: Írjon 2D egykerekű bicikli szimulátor programot. A pálya negatív tenziójú explicit(!) Kochanek-Bartels spline, amelynek kontrollpontjait az egér bal gombjának lenyomásával lehet megadni, tetszőleges időpontban és sorrendben. A bicikli vonalas ábra, forgó, többküllős kerékkel és vadul pedálózó biciklissel. A kamera ortogonális vetítéssel dolgozik, kezdetben rögzített, majd SPACE hatására a biciklizőt követi. A biciklis a kezdeti kamera két széle között teker fel és alá, amit kb. 5 másodperc alatt tesz meg. A biciklis állandó erővel teker, amivel a nehézségi erőt és a sebességgel arányos légellenállást küzdi le. A tömeg az izmok erejéhez képest elhanyagolható, így a sebesség gyorsan változhat. A távoli háttér egy procedurálisan textúrázott téglalap, ami az égboltot és pozitív tenziójú explicit(!) Kochanek-Bartels spline-nal definiált hegységet ábrázol. A távoli háttér nem követi a kamerát a hamis perspektíva érdekében. Extrák: Az út mellett tereptárgyak helyezhetők el. A biciklis orientációja fizikailag helyesen úgy változik, hogy a forgatónyomaték zérus legyen.

Nagy Marcell

Kaleidoszkóp: Készítsen virtuális kaleidoszkópot. A tükörrendszer szabályos sokszög, amelynek az oldalszáma 3-ról indul és az ‘a’ billentyűvel lehet inkrementálni. A tükör anyaga arany (‘g’) vagy ezüst (‘s’). A kaleidoszkóp végén legalább három, különböző anyagtulajdonságú ellipszoid található, amelyet ambiens+diffúz+Phong-Blinn spekuláris modell szerint veri vissza a fényt. Az ellipszoidokat véletlen erők érik (Brown mozgás) amit követve mozognak.

Nagy Marcell

Klein Katica: Klein Katica (Coccinella septempunctata kleina) egy Klein kancsó geometriájú bolygó lakója, és a földi rokonához hasonlóan félellipszoid (nem gömb!) formája van, amit piros alapon 7 fekete pötty díszít. Klein Katica elindult felderíteni a textúrázott bolygóját, amelyen legalább kettő textúrázott Dini felület jelenti a növényzetet. A nap látszólag a q kvaterinó szerint forog a bolygó AABB-jének középpontja körül (t az eltelt idő sec). Katica a bolygó u izoparametrikus görbéjéhez (hosszúsági kör) képest adott szögben halad, a szöget pedig az ‘a’ billentyűvel lehet növelni, az ‘s’-sel csökkenteni. Feltételezheti, hogy az u, v izoparametrikus görbék egymást merőlegesen metszik. Az avatárunk Katicát kissé lemaradva követi kezdetben olyan magasságból, hogy a teljes bolygó látható legyen, a SPACE hatására viszont közvetlen közeléből. A Klein bolygón a Helmholtz szimmetria megsértése és a numerikus differenciálás főbenjáró bűn, ezért a bolygót és növényeket egyéni ízlés szerinti diffúz + szimmetrikus! spekuláris modell szerint kell megjeleníteni, a deriváltakat pedig analitikusan! kell számítani. Katica NPR módon illegeti magát.

Nagy Marcell

2019. ősz:

Poincaré sejtés: Григорий Яковлевич Перельман előtt tisztelegve írjon 2D görbületcsökkentő folyam szimulátor programot. A kiinduló terület határgörbéke zárt(!) Catmull-Rom spline, amelynek kontrollpontjait tetszőleges számban az egér bal gombjának lenyomásával lehet megadni. A terület határa fehér, a belseje cián színű. Az ‘a’ billentyű lenyomására indul a folyam, amely a spline által határolt területet 100 csúcsból álló sokszöggel közelíti, majd a csúcsokat folyamatosan mozgatja úgy, hogy a görbület csökkenjen, de a csúcsok súlypontja és a terület állandó maradjon. A folyam sebességét úgy kell megválasztani, hogy 5 másodperc alatt a tesztobjektum nagyjából körré váljon. Egy szimulációs időlépésben egy csúcs elmozdulása arányos a csúcs és szomszédjaira illesztett, (közelítőleg) egyenletes sebességű Lagrange interpolációs görbe gyorsulás vektorával (görbület) és az időlépés hosszával. A felhasználó a szimulációval létrehozott animációban gyönyörködhet, miközben a ‘p’ billentyű lenyomásával a kameraablakot szélességének 10%-val jobbra tolhatja, a ‘z’ billentyű lenyomásával pedig 10% nagyítással belezoomolhat képbe.

Kettős rés: Demonstrálja a kettős rés kísérletet a virtuális világban. A színtérben egy 526 nm-es hullámhosszú koherens laser forrás van, valamint két inkoherens, egy fehér pontforrás és tetszőleges színű ambiens fényforrás. A koherens laser fényforrás egy végtelen hengerbe van zárva, amelyen Bézier görbével megadott U alakú rést vágtak. A henger az x^2+y^2-1=0 implicit felület skálázott/elforgatott/eltolt változata (transzformációk valódiak és nem spórolhatók meg, a henger tengelye nem lehet párhuzamos egyetlen koordinátatengellyel sem). Az U ágak közötti távolság néhány ezer nm, a résvastagság a hullámhosszhoz képest elhanyagolható. A résen a fény elhajlik (diffrakció) és egy egyköpenyű hiperboloid ernyőt világít meg, amelyen interferenciaminták alakulnak ki. Az egyköpenyű hiperboloid az x^2+y^2-z^2-1=0 implicit felület skálázott/elforgatott/eltolt változata (transzformációk valódiak és nem spórolhatók meg, a hiperboloid tengelye nem lehet párhuzamos egyetlen koordinátatengellyel sem). A henger és hiperboloid távolsága kb. 5000 nm. A henger és a hiperboloid diffúz+spekuláris, az anyagtulajdonságok ízlés szerint megválaszthatók. A jelenetet egy olyan kamerabeállításból nézzük, amelyből az interferenciaminta élvezhető. A szimuláció során a rést 100 pontforrással lehet közelíteni, amelyek intenzitása a pont által képviselt ívhosszal arányos.

Kisvonat: Építsen kisvonatot egy 100x100 tf (talpfa az EU új hosszúság mértékegysége) alapterületű hegyvidéken. A hegynek legalább három csúcsa van, (diffúz) színezése az atlaszokban megszokott (alacsony területek zöldek, feljebb pedig barnás), spekuláris színe fehér. Kezdetben felülnézetből látjuk a helyet, ahol bal egérgomb lenyomással egy zárt interpolációs görbe kontrollpontjait adhatjuk meg. A görbe típusa megválasztható, de annak interpolációsnak, a kontrollpontokban legalább C1 folytonosnak, másutt legalább C2 folytonosnak kell lennie. Ez a görbe a kisvasút pályája felülnézetben. A kisvasút sínpárja közül takarékossági okokból csak az egyiket építik meg, de azt ezüstből (törésmutató: 0.14, 0.16, 0.13, kioltási tényező: 4.1, 2.3, 3.1, rendre az RGB hullámhosszokon). A sín csak ambiens és spekuláris módon veri vissza a fényt, a spekuláris visszaverődési tényező a Fresnel függvénnyel arányos. A sín gerincét a felülnézetben megadott görbe definiálja, keresztmetszete szabadon kialakítható. A görbe a terep felett megy, talpfákról nem kell gondoskodni. Bármely billentyű lenyomása indítja az animációt, amikor a kisvasút fülkéjéből előrenézve utazunk a nyomvonalon és gyönyörködünk az előttünk kígyózó sínben és a tájban, miközben a kisvasút 20 tf/sec átlagsebességgel végigvisz a pályán. A kisvasút a hegyoldalon megdől, azaz a virtuális kamera függőleges iránya a terep normálvektora. A tájat két pontfényforrás világítja meg, amelyek egymás kezdeti pozíciója körül az adott kvaternió szerint forognak.

2020. tavasz:

Szíriusz rajzoló: A Szíriusz csillagképből érkező földönkívülieknek megtetszett a Word, Powerpoint, stb. jellegű 2D-s rajzoló program, de azt közvetlenül nem használhatják, ugyanis ők más geometriával dolgoznak. Önt bízták meg a program adaptálásával arra az egyszerű esetre, amikor három pontra egy háromszöget kell illeszteni. Szerencsére adtak egy szótárat, ami a szíriuszi geometriai fogalmakat megfelelteti az általunk használt euklideszi geometriai fogalmaknak. A Szíriusz sík az euklideszi sík egység sugarú köre, amit alapkörnek neveznek. Miközben az euklideszi síkot a komplex számokkal lehet számszerűsíteni, a Szíriusz síkot az egységnél kisebb abszolút értékű komplex számokkal. Amíg az euklideszi sík metrikája |dz|=sqrt(dx^2+dy^2) a Szíriusz sík metrikája |dz|/(1-|z|^2). A Szíriusz egyenes egy olyan euklideszi körív, amely az alapkörre merőlegesen érkezik. A feladat három egér klikk után a három pont által definiált háromszöget a háttértől eltérő színnel kitölteni, az éleket ezektől eltérő színnel felrajzolni, és a szabványos kimenetre a három szögeit és oldalainak hosszát kiírni.

Megoldás

Napfénycső szimulátor: A Velux a napfénycsöveit a beépítés előtt virtuális világban kívánja tesztelni. A feladatot önre osztotta a sors arra az esetre, amikor a napfénycső ezüst egyköpenyű hiperboloid és a nap közvetlenül nem világít be a szobába. A napfénycső által megvilágított szobában legalább három objektum van, amelyek szabadon megválaszthatók, de nem lehetnek gömbök. Az objektumokból legalább az egyik optikailag sima arany. A rücskös anyagok a diffúz+PhongBlinn modellt követik. Az nap+égbolt fénye konstans égbolt radianciával és a nap irányának környékén erősödő nap radianciával jellemezhető. Az égbolt fény csak a csövön juthat be a szobába, ahol csak egy ambiens fényforrás van jelen. Feladat, a szobában lévő virtuális kamerából lefényképezni a látványt.

Megoldás

Vírusölő antitest: Készítsen „antitest vírust öl” játékot, amely egy textúrázott gömb vagy henger belsejében zajlik, amit pont fényforrások világítanak meg. A vírus teste haragosan hullámzó gömb, a nyúlványok Tractricoid alakzatok, amelyek a hullámzó felületre mindig merőlegesek. A nyúlványok egyenletesen fedik be a felületet. A gömb és a nyúlványok textúrázottak diffúz/spekuláris típusúak. A vírus a saját tengelye körül forog állandó szögsebességgel, ezen kívül a testén kívüli pivot pont körül is, amit a [cos(t), sin(t/2), sin(t/3), sin(t/5)] (vigyázat nem normalizált!) kvaternió ad meg (t az idő sec-ben). Az antitest tetraéder Helge von Koch típusú felosztással két szinten. Az antitest tüskéinek nyújtogatásával kelt félelmet. Az antitest saját tengelye körül forog és Brown mozgással halad előre, az x, X, y, Y, z, Z billentyűket lenyomva tartva a haladás az adott (kisbetű: pozitív, nagybetű: negatív) irányba valószínűbb. A Brown mozgás sebességvektora véletlenszerű és 0.1 sec-ként változik. Ha az antitest alaptetraéderének befoglaló gömbje és az alapállatú vírus gömbje ütközik, a vírus elpusztul, azaz mozgása megszűnik.

Megoldás

2020. ősz:

Mercator útvonaltervező: A program `m’-mel választhatóan két képet mutat a föld (−85,+85) fok szélesség közötti és (−20,160) fok hosszúság közötti részéről. Az egyik a Mercator térkép, a másik merőleges vetület a lehető legnagyobb méretben. A képen a tengert, Eurázsia és Afrika határát rajzoljuk fel, a többi földrésztől eltekintünk. A tenger színe a 430 nm hullámhosszú, Eurázsia színe 530 nm, Afrikáé pedig 560 nm-es monokromatikus fénytől megkülönböztethetetlen, feltételezve, hogy a monitor pixelek 444, 526 és 645 nm-en sugároznak. A hosszúsági és szélességi köröket 20 fokonként vékony fehér vonallal jelöljük. Eurázsiát és Afrikát szélesség-hosszúság koordinátájú kontrolpontokkal adjuk meg, amelyekre egy-egy O-spline-t kell illeszteni. Az útvonal állomásait az egér bal gomb lenyomásával bármely(!) nézetben kijelölhetjük. Az állomásokat a rendszer a gömbön sárga legrövidebb utakkal köti össze, és kiírja printf-fel az állomás szélesség-hosszúság koordinátáit és az utolsó állomástól mért hosszát (a föld sugara 6371 km). A feladatot 2D-s grafika szabályai szerint kell megoldani, ezért csak olyan OpenGL funkciók használhatók, amelyek az „OpenGL és GPU programozás” végéig megjelentek.

Eurázsia kontrollpontjai: (36, 0), (42, 0), (47, -3), (61, 6), (70, 28), (65, 44), (76, 113), (60, 160), (7, 105), (19, 90), (4, 80), (42, 13)

Afrika kontrollpontjai: (33, -5), (17, -16), (3, 6), (-35, 19), (-3, 40), (10, 53), (30, 33)

Megoldás

Mirascope: A mirascope két ugyanolyan, egymásra tett és szembe fordított paraboloid tükör, ahol az egyik fókuszpontja a másik aljára esik és a felsőn lyuk van. A mi mirascope-unk aranyból van és tükör lévén optikailag sima. A mirascope az alsó aljára tett tárgyat a felső lyukban megjeleníti. A szimulátorban a tárgy diffúz-spekuláris anyagú dodekaéder, amit a mirascope belsejében lévő pont fényforrás és az egész térben jelen lévő ambiens forrás világít meg. A néző és a mirascope egy Platon-i szabályos test geometriájú szoba belsejében szemlélődik. A virtuális kamerán kívülről, felülről és oldalról néz rá a mirascope-ra. Az ‘f’ lenyomásával a szempozíció feljebb kerül, az ‘F’ hatására lejjebb úgy, hogy a távolsága a mirascope aljától állandó legyen.

Az arany törésmutatója és kioltási tényezője az r,g,b hullámhosszokon: n/k: 0.17/3.1, 0.35/2.7, 1.5/1.9

Megoldás

Gravitáló gumilepedő: A lapos tórusz topológiájú (ami kimegy, a szemközti oldalon bejön) gumilepedőnket kezdetben felülről szemléljük, amelyre nagy tömegű, nem mozgó testeket tehetünk a jobb egérgomb lenyomással, és kistömegű golyókat csúsztathatunk súrlódásmentesen a bal alsó sarokból a bal egérgomb lenyomással, amikor a lenyomás helye a bal alsó sarokkal együtt a kezdősebességet adja meg. A nyugalomban lévő nagytömegű testek görbítik a teret, azaz deformálják a gumilepedőt, de ők nem láthatók. Az okozott benyomódás a tömeg közepétől

Kiírás

2021. tavasz:

Gráf megjelenítő fókusszal: Készítsen programot, amely egy véletlen gráfot esztétikusan megjelenít és lehetőséget ad a felhasználónak annak tetszőleges részének kinagyítására, mialatt a maradék rész még mindig látszik. A gráf 50 csomópontból áll, telítettsége 20%-os (a lehetséges élek 20% valódi él). Az esztétikus elrendezés érdekében a csomópontok helyét egyrészt heurisztikával, másrészt a hiperbolikus sík szabályainak megfelelő erő-vezérelt gráfrajzoló algoritmussal kell meghatározni. A fókuszálás érdekében a gráfot a hiperbolikus síkon kell elrendezni és a Beltrami-Klein módszerrel a képernyőre vetíteni. A fókuszálás úgy történik, hogy a gráfot a hiperbolikus síkon eltoljuk úgy, hogy az érdekes rész a hiperboloid aljára kerüljön. Az egyes csomópontok a hiperbolikus sík körei, amelyek a csomópontot azonosító textúrával bírnak.

Orbifold vizualizáció: Készítsen sugárkövető programot, amely egy √3 m sugarú gömbbe írható dodekaéder szobát jelenít meg. A szobában egy f(x,y,z)=exp(ax^2+by^2-cz)-1 implicit egyenlettel definiált, a szoba közepén levő 0.3 m sugarú gömbre vágott, optikailag sima arany objektum van és egy pontszerű fényforrás. A szoba falai a saroktól 0.1 méterig diffúz-spekuláris típusúak, azokon belül egy másik, hasonló, de a fal középpontja körül 72 fokkal elforgatott és a fal síkjára tükrözött szobára nyíló portálok. A fényforrás a portálon nem világít át, minden szobának saját fényforrása van. A megjelenítés során elég max 5-ször átlépni a portálokat. A virtuális kamera a szoba közepére néz és a körül forog. Az arany törésmutatója és kioltási tényezője: n/k: 0.17/3.1, 0.35/2.7, 1.5/1.9 A többi paraméter egyénileg megválasztható, úgy, hogy a kép szép legyen. Az a,b,c pozitív, nem egész számok.

2022. tavasz

Luxo Grandpa:

2023. tavasz

UFO hami: A hiperbolikus síkon két azonos méretű UFO hami garázdálkodik. A zöld egy körpályán kering, a pirosat a felhasználó irányítja ('e': menj az orrod irányába egyenesen állandó sebességgel; 's' fordulj jobbra, 'f': fordulj balra állandó szögsebességgel). A cél, hogy a piros UFO hami bekapja a zöld UFO hamit. A hamik a csigához hasonlóan a nyálukat a síkon hagyják, azaz a meglátogatott pontokon fehér színű görbék rajzolódnak ki. A hamik teste kör, szájuk kör alakú és ciklikusan nyílik, illetve záródik, két szemük, bennek szemgolyók vannak, amelyek ugyancsak körök. A hamik mindig egymásra néznek. Mi a jelenet Beltrami-Poincaré vetületét élvezhetjük a képernyőnkön.

A megoldás során a következő függvényeket valósítsa meg és használja fel:

1. Egy irányra merőleges irány állítása.

2. Adott pontból és sebesség vektorral induló pont helyének és sebesség vektorának számítása t idővel később.

3. Egy ponthoz képest egy másik pont irányának és távolságának meghatározása.

4. Egy ponthoz képest adott irányban és távolságra lévő pont előállítása.

5. Egy pontban egy vektor elforgatása adott szöggel.

6. Egy közelítő pont és sebességvektorhoz a geometria szabályait teljesítő, közeli pont és sebesség választása.

Lehallgatástervező: Készítsen CPU sugárkövetés felhasználásával lehallgatástervező programot.

1. A megjelenített szoba téglatest alakú benne két további típusú Platon-i szabályos test található (Pl. OBJ formátumú definíciójuk: https://people.sc.fsu.edu/~jburkardt/data/obj/obj.html). A szoba falai kívülről befelé átlátszóak, így belelátunk a szobába még kívülről is.

2. A szobában 3 darab kúp alakú lehallgató található. Az lehallgató csak a kúp szögében képes érzékelni, az érzékenység a távolsággal csökken (a csökkenés sebessége megválasztható, cél az esztétikus megjelenés).

3. A szobát és eszközeit alapesetben szürke színnel spekuláris-ambiens modellel jelenítük meg, amely a felületi normális és a nézeti irány közötti szög koszinuszának lineáris függvénye, amelynek értékkészlete a [0.2, 0.4] tartomány (L = 0.2 * (1 + dot(N, V)), ahol L az észlelt sugársűrűség, N a felületi normális, V pedig a nézeti irány, mindketten egységvektorok).

4. A lehallgatás érzékenységét a szürke alapszínhez hozzáadjuk, az első lehallgatóra piros árnyalatokkal, a másodikra zölddel, a harmadikra kékkel. Az érzékenység a takart pontokban zérus.

5. A lehallgatók interaktívan áthelyezhetők. A bal egérgomb lenyomására, a kurzor alatt látható 3D ponthoz megkeressük a legközelebbi lehallgatót, annak pozícióját a megtalált pontra állítjuk, az irányát pedig a felület normálvektorára.


Bungee jumping szimulátor