Számítógépes grafika és képfeldolgozás házi feladat kiírások

A VIK Wikiből
A lap korábbi változatát látod, amilyen Kiskoza (vitalap | szerkesztései) 2013. május 25., 11:24-kor történt szerkesztése után volt. (→‎Első feladat)

Az oldal fejlesztésre szorul, amennyiben hallgatod/tad a tárgyat kérlek töltsd fel a feladatok.

2012/13 tavaszi félév

Első feladat

2013 tavasz, 1. hf

Készítsen breakout 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.

A használható OpenGL függvények: glBegin, glColor, glVertex2f, glEnd, glClearColor, glClear, glViewport, glMatrixMode, glLoadIdentity, gluOrtho2D.

Extra élvezet profiknak: ne csak az impulzus, hanem a perdület is maradjon meg az ütközésnél.

Beadási határidő: 2013. 03. 10. 23:59

Második feladat

2013 tavasz, 2. hf

Készítsen 2D editort, ami 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).

Beadási határidő: 2013. 03. 24. 23:59

Harmadik feladat

Jelenítsen meg egy 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.

Beadási határidő: 2013. 04. 14. 23:59

Negyedik feladat

Készítsen virtuális világot csempézett szobával, 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.

Beadási határidő: 2013. 05. 05. 23:59

Ötödik feladat

A 4. feladat fókájá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.

Beadási határidő: 2013. 05. 19. 23:59

2012/13 őszi félév

Első feladat

Hansel és Gretel hegyes-völgyes, 10km x 10km-es négyzet alakú, kerítéssel körbevett erdőben rohangál (gyorsan), 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 (pszeudo) véletlenszerűen kiválasztott pontján egy 20 m magas torony tetején mobiltelefon antenna található. A 't' billentyű lenyomásának hatására a telefontársaság egy brigádja kiszáll és egy szempillantás alatt egy másik (pszeudo) véletlen pontra telepíti a tornyot. 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.

Értelemszerűen Hansel és Gretel a terepen halad. 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 meredekséget a függvényből szimbolikus deriválással (azaz nem differenciahányados közelítéssel) kell számítani, célszerűen saját kézzel, nem pedig valamely matematikai csomag felhasználásával.

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, illetve a Vénusz jelét kapják, Hansel világoskék, Gretel pedig rózsaszín. A bolygók jelében található köröket százszöggel kell közelíteni. A torony felülnézetben egy sárga háromszögnek látszik. 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. A láthatóságot sugármasírozással (ray-marching) lehet ellenőrizni, legfeljebb 100m-res lépésközt alkalmazva.

Második feladat

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

Harmadik feladat

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.

Szépségverseny: A fényforrás, illetve az alakzatok mozgatásával video készíthető, amellyel szépségversenyen lehet indulni. Itt a paraméterekre semmiféle korlátozás sincs.

Negyedik feladat

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.

Ötödik feladat

Animálja a 4. feladat helikopterét a következőképpen. 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.

2011/12 őszi félév

Első feladat

2011 ősz, 1. hf

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.


Beadási határidő: 2011. 09. 26. 23:59

Második feladat

2011 ősz, 2. hf

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.

Kiadási határidő: 2011. 09. 27. Beadási határidő: 2011. 10. 14. 23:59

Harmadik feladat

Ajándékozzon arany- vagy rézgyűrűt (az anyag megválasztható) virtuálisan, valamint opcionálisan gyémántot is!

A gyűrű egy sima felületű, azaz ideális tükörként viselkedő henger. A gyűrű egy diffúz, mintás, téglalap alakú asztalon fekszik. A mintázat azt jelenti, hogy a diffúz visszaverődési tényezőt egy alkalmasan választott függvénnyel kell előállítani, amely függ az asztalon lévő pontos helytől (procedurális textúra). A virtuális világot világoskék ambiens fény és egy fehér pont- vagy irányfényforrás (tetszés szerint választhatunk a pont és irányfényforrás között) világítja meg. Az opcionális gyémántot egy ellipszoid alakú kőből csiszolták, azaz poliéder, ami az ellipszoid tesszellált változata. A gyémánt felületek simák, ideális tükörként és törő felületként viselkednek.

A gyűrű és az opcionális gyémánt kausztikus foltokat ejt a diffúz mintás asztalon. A kamerát úgy kell elhelyezni, hogy a kausztikus foltok, árnyékok és a tárgyak szépen láthatók legyenek a keletkező képen.

A törésmutató (n) és kioltási tényező (k) az r, g, b hullámhosszain:

                 r         g         b
 Gyémánt (n/k)   2.4/0     2.4/0     2.4/0
 Arany (n/k)     0.17/3.1  0.35/2.7  1.5/1.9
 Réz (n/k)       0.2/3.6   1.1/2.6   1.2/2.3

Az opcionális gyémánt nélkül is elfogadjuk a feladatot, ha a többi rész jó.

Beadási határidő: 2011. 11. 13. 23:59

Negyedik feladat

É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:

  1. 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.
  2. Ú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.
  3. 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.

Beadási határidő: 2011. 11. 28. 23:59

Ötödik feladat

A 4. feladatból készítsen játékot két játékos számára, az egyik a csirkéket irányítja, a másik az úthengert.

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


Beadási határidő: 2011. 12. 11. 23:59

2010/11 tavaszi félév

A mintaképek csak illusztrációk, legtöbbször nem futó OpenGL programból, hanem egyéb módon lettek elkészítve!

Első feladat

2011 tavasz, 1. hf

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.

Második feladat

2011 tavasz, 2. hf

Készítsen Valentin napi dobogó szívecskét!

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

Megjegyzés: A feladatkiadáskor az előadáson elhangzottak is a specifikáció elidegeníthetetlen részét képezik. Uff.

Harmadik feladat

2011 tavasz, 3. hf

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

Törésmutató/kioldási tényező a g,b,r hullámhosszokon:

 b                b          g          r
 Üveg (n/k)       1.5/0      1.5/0      1.5/0
 Arany (n/k)      1.5/1.9    0.35/2.7   0.17/3.1
 Réz (n/k)        1.2/2.3    1.1/2.6    0.2/3.6

A törésmutató egynél kisebb értéket is felvesz, azaz ezek szerint az anyag belsejében a fény 300000 km/sec-nél is gyorsabban halad (nincs itt ellentmondás?).

Az algoritmust a CPU-ra kell implementálni, a kiszámított képet glDrawPixels(width, height, format, type, data) hívással kell a rasztertárba másolni.

A program nem tartalmazhat felesleges utasításokat

Negyedik feladat

Készítsen 3D színteret és jelenítse meg OpenGL-lel.

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.


Miként korábban, továbbra is érvényes, hogy csak az idáig tanult és a fejlécben szereplő függvények alkalmazhatók, tehát a glu Quadric családja (pl. gluSphere) NEM. Kéretik a textúrákat procedurálisan generálni, kilométeres inicializált tömbök mellőzendők.

2010/11 Őszi félév

A mintaképek csak illusztrációk, legtöbbször nem futó OpenGL programból, hanem egyéb módon lettek elkészítve!

Első feladat

2010 ősz, 1. hf

Írjon 2D útkereszteződés szimulátort. 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!

A feladat megoldásához csak azok az OpenGL függvények használhatók, amelyek az első két héten előkerültek.

Beadási határidő: 2010. 09. 30. 23:59

Második feladat

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

http://i.imgur.com/Zxvi9YQ.jpg

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.

http://i.imgur.com/Mx4It3V.jpg

A 2D kamera (ablak), amelyen keresztül belesünk Placcsék lakásába, kezdetben a teljes szobát mutatja. 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 referenciahelyzetből a világ aktuális helyére vivő modellezési transzformációt az OpenGL MODELVIEW, a kameratranszformációt pedig a PROJECTION transzformációjával kell megvalósítani.

A megoldásban csak a "2D grafikus rendszerek" végéig tanult OpenGL függvények alkalmazhatók (pl. textúrák nem). A GL_POLYGON nem robusztus és ezért nem megengedett, a glu tesszellátorok tiltottak, mert nem tanuljuk őket. A beadott programban a memória nem szivároghat, azaz a dinamikus allokációt a lehetőség szerint mellőzzék (lélekben is C++-ban programozzanak), ha mégis erre kényszerülnek, akkor pedig szabadítsák fel a feleslegessé vált memóriaterületeket.

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

  • Beadási határidő*: 2010. 10. 30. 23:59

Harmadik feladat

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

Anyagmodellek: az n törésmutató/ k kioltási tényező 440 nm-en (kék), 520 nm-en (zöld) és 650 nm-en (piros).

 Üveg (n/k):   1.5/0,    1.5/0     1.5/0 
 Arany (n/k):  1.5/1.9   0.35/2.7  0.17/3.1 
 Ezüst (n/k):  0.16/2.3  0.13/3.1  0.14/4.1 
 Réz (n/k):    1.2/2.3   1.1/2.6   0.2/3.6 

http://i.imgur.com/1XJwCbg.jpg

Beadási határidő: 2010. 11. 10. 23:59

Kiadás dátuma: 2010. 10. 19.

Negyedik feladat

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

http://i.imgur.com/G5HGPwB.png

Beadási határidő: 2010. 11. 28. 23:59

Ötödik feladat

A 4. feladatban szereplő ATEW-eket sétáljanak és harcoljanak. 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).

Beadási határidő: 2010. 12. 13. 23:59

Válogatás a 2010. évi kisházi feladatokból:

3. kisházi:

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

5. kisházi:

Gulyás Máté, Kovács Andor, Kántor Tibor, Rajcsányi Vilmos, Balogh Norbert, Keresztes Ádám, Tükör Gábor, Mészáros Kornél, Illés János, Szebeni Szilveszter, Baski Attila, Koczka Tamás, Bozóki Szilárd, Medvey Ádám, Dul Dávid, Leitner Szabolcs, Szabó Péter, Pusztai Bálint, Dorjgotov Anudar, Lám István, Angeli Róbert, Viniczay Dávid, Schmidt Antonio, Szabó Péter, Diószegi Tamás, Fekete András, Hámos Gergely, Nagy Zoltán Adrián, Csontos Gábor, Szabó András, Kiss Attila, Szabó Bálint István, Kovács Dávid Balázs, Lázár Endre, Vőneki Balázs, Magyar Ferenc, Bori András, Lenthár Gábor, Kávássy Dániel, Mikó Norbert

2009/10 Őszi félév

Első feladat

Írjon egyenletes B-spline rajzoló programot OpenGL felhasználásával. A vezérlőpontokat egy globális tömbben tárolja, a vezérlőpontok száma min 10, max 100 lehet. A program indulásakor a vezérlőpontok látszanak a képernyőn, a görbe, valamint a görbe deriváltját (sebesség) és második deriváltját (gyorsulás) jelképező vektorok a t=0 paraméterértéknél. A vektorokat nyilakkal kell ábrázolni. Az egyes elemek színe eltérő. Minden SPACE billentyű lenyomásra, a t paraméter 0.3-mal nő, amelynél a görbe pontja, a sebesség és gyorsulás vektorok felrajzolandók. Ha elértük a görbe végét, akkor a folyamat kezdődik előlről. Az nézeti téglalap a teljes ablakot lefedi és felbontása 600x600. Fontos figyelmeztetések: 1. A feladat szövegében derivált, azaz differenciálhányados szerepel, nem pedig annak differenciahányadossal történő közelítése. A deriváltat analitikusan kell kiszámolni. 2. Más által írt program kiherélt változata, ami nem tartalmaz jelentős saját hozzájárulást = PLÁGIUM. 3. glut függvényeket használni tilos. 4. glu függvényeket csak akkor lehet használni, ha a feladat szövege ezt kifejezetten engedélyezi. Az első feladat esetében pl. a gluOrtho2D nem használható.

Beadási határidő: 2009. 10. 20. 23:60

Második feladat

A kecskeméti új Mercedes gyár Önt kérte fel, hogy az új XXX kategóriás csúcsmodelljében a fényszórót tervezze meg. A fényforrás pontszerű, izotróp (azaz kibocsátott fotonok iránya egyenletes eloszlású), fénye fehér. A forrást körülvevő fényvető búra paraboloid, amely aranyból van, mert az XXX kategóriánál így dukál. A lámpából a fény egy ellipszoid alakú lencsén keresztül lép ki (lásd a csatolt ábrát).

Az arany és az üveg törésmutatója, valamint kioltási tényezője a kék, zöld és vörös fény hullámhosszain a következő:

Arany törésmutató: 1.5 0.35 0.17 Arany kioltási tényező: 1.9 2.7 3.1 Üveg törésmutató: 1.5 1.5 1.5 Üveg kioltási tényező: 0 0 0

Egy szimulátorprogramot kell készítenie, amely a lámpa előtt lévő függőleges falon egy alkalmas négyzet belsejében megjelenő képet kiszámítja és a képernyőn megjeleníti. A képernyőn a falnak a lámpa által bevilágított négyzete tűnik fel, 600x600-as felbontásban, ahol egy pixel vörös/zöld/kék intenzitása a pixelnek megfelelő felületdarabra eső teljesítménnyel arányos a megfelelő hullámhosszon. Az arányossági tényezőt úgy kell beállítani, hogy a pixelek színintenzitásai a 0-1 tartományba essenek. Az első képet tízezer, egyenletes eloszlású véletlen kezdeti iránnyal létrehozott foton követésével állítsa elő. Minden space billentyű hatására a fotonok számát növelje az előző érték tízszeresére. A nem specifikált méreteket úgy vegye fel, hogy szép kép szülessen. A visszaverődés valószínűségét a Fresnel egyenlet alapján számítsa, a törési irányt pedig a Snellius-Descartes törvény szerint. A foton utakat csak maximum 5 szóródásig kell követni.

A számításokat a CPU-n végezze el, az OpenGL-t csak az elkészült kép megjelenítésére használja. Az OpenGL egy képet a glDrawPixels függvény hatására tesz ki.

Segítség az egyenletes eloszlású irányok létrehozása: Három egymás utáni, egyenletes eloszlású véletlen számot skálázzunk át a [-1,1] intervallumra. A számokat egy pont koordinátáinak tekintve a (-1,-1,-1), (1,1,1) sarokpontú kockában egyenletes eloszlással generálunk pontokat. Ha a pont az origó középpontú egységsugarú gömbön kívül van, a mintát elvetjük. A megmaradó pontok a gömb belsejében egyenletes eloszlásúak lesznek, azaz ha őket a gömb felületére vetítjük (normalizálás), akkor az egységsugarú gömb felületét – azaz az irányok halmazát – mintavételezzük egyenletesen.

Beadási határidő: 2009. 11. 03. 23:59

Harmadik feladat

Előzetes kiírás.

Hozzon létre egy virtuális világot és jelenítse meg OpenGL-lel (Cg nem használható). A virtuális világ egy 1 négyzetkilométer földterület,ahol NxM piramis (N,M>4) és egy tank található. A föld zöld, diffúz, a piramisok sárgás-fehérek és spekulárisan csillogóak, a tankon terepszínű textúra látható és ugyancsak csillogó. A nap keletről süt, 20 fokot zár be a talajjal. A nap erős intenzitású fehér irányfényforrásnak tekinthető. Az égbolt (ambiens) fény sugársűrűsége konstans, türkiszkék (szép idő van).

A tank teste poligonokból áll, lövegtornya hengerszerű, az ágyú ugyancsak henger, amelynek a belseje üres, különben nem tudna lőni. A lövegtorony forgatható, az ágyú emelhető. A lánctalpak részletes kidolgozása mellőzhető (de nem tiltott). A tank lőtt, és most éppen a lövedék a cső végének közelében van. A lövedék hengerszimmetrikus, csúcsa hegyes, szürke, csillogó. A jobb láthatóság miatt a lövedék sugara lehet nagyobb mint az ágyucső sugara.

A piramisok és a tank földre vetített árnyékát nem kötelező megjeleníteni (de lehet). Állítsa be a virtuális kamerát úgy, hogy a tank, a repülő lövedék és a piramisok egy része látható legyen.

Beadási határidő: 2009. 11. 15. 23:5

Negyedik feladat

A harmadik feladat ellenséges tankját pályaanimációval mozgassa a [0,5] sec időintervallumon egy Bézier görbe mentén. A lövegtorony mindig az avatár felé fordul, a löveg emelkedik úgy, hogy a ferde hajítás éppen az avatárnál fejeződjön be. A t=1 sec pillanatban a tank lő, a golyó ferde hajítással elrepül. Az avatár szintén egy tank, de csak a környezetet látja (FPS). Az avatártank két botkormánnyal vezérelhető, amelyek a bal és jobb lánctalpakhoz vannak kötve. A botkormányokat q, illetve p billentyűkkel lehet előre dönteni (a botkormányok alaphelyzetbe állításához bármilyen megoldást kitalálhat, azt úgy sem fogjuk tesztelni). Az avatártank a piramisokon nem hatolhat át. Az időlekérdezéshez a glutGet(GLUT_ELAPSED_TIME) függvény használható.

Beadási határidő: 2009. 12. 10. 23:59

Nagy házi feladatok tabló

[1]

-- keeroy - 2010.09.23. -- CsL - 2010.09.23.