„Számítógépes grafika és képfeldolgozás házi feladat kiírások” változatai közötti eltérés
Tg44 (vitalap | szerkesztései) Nincs szerkesztési összefoglaló |
Tg44 (vitalap | szerkesztései) |
||
381. sor: | 381. sor: | ||
Beadási határidő: 2009. 12. 10. 23:59 | Beadási határidő: 2009. 12. 10. 23:59 | ||
* [http://keer0y.luminarium.hu/grafh.jpg Egy feladatmegoldás(-ból vett állókép) (keeroy)] | * [http://keer0y.luminarium.hu/grafh.jpg Egy feladatmegoldás(-ból vett állókép) (keeroy)] dead | ||
===Nagy házi feladatok tabló=== | ===Nagy házi feladatok tabló=== |
A lap 2012. november 22., 15:24-kori változata
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
Az oldal fejlesztésre szorul, amennyiben hallgatod/tad a tárgyat kérlek töltsd fel a feladatok.
2011/12 őszi félév
Első feladat
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.
<a href="%ATTACHURLPATH%/graf-hazi1.png">
</a>
Beadási határidő: 2011. 09. 26. 23:59
Második feladat
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
<a href="%ATTACHURLPATH%/2011-osz-hazi2.png">
</a>
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
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.
<a href="%ATTACHURLPATH%/201011tavasz-hazi1.png">
</a>
Második feladat
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.
<a href="%ATTACHURLPATH%/201011tavasz-hazi2.png">
</a>
Harmadik feladat
Ü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
<a href="%ATTACHURLPATH%/201011tavasz-hazi3.png">
</a>
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
Í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
<a href="%ATTACHURLPATH%/hazi1.jpg">
</a>
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?).
<a href="%ATTACHURLPATH%/placcs1.jpg">
</a>
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 href="%ATTACHURLPATH%/placcs2.jpg">
</a>
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
<a href="%ATTACHURLPATH%/3hazi.jpg">
</a>
- 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.
<a href="%ATTACHURLPATH%/4hazi.png">
</a>
- 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:
<a href="http://www.youtube.com/watch?v=T-QS6_q_Yq4">Angeli Róbert</a>, <a href="http://www.youtube.com/watch?v=V-_-h_DB81s">Koczka Tamás</a> ( -_- ), <a href="http://www.youtube.com/watch?v=GFr7-oOJDgU">Leitner Szabolcs</a>, <a href="http://www.youtube.com/watch?v=zWMrs35_uIA">Kovács Balázs</a>, <a href="http://www.youtube.com/watch?v=1EaaoUyM8Rs">Zsemlye Nóra</a>
5. kisházi:
<a href="http://www.youtube.com/watch?v=4v6r350Pm-A">Gulyás Máté</a>, <a href="http://www.youtube.com/watch?v=6jsgUaNkjfQ">Kovács Andor</a>, <a href="http://www.youtube.com/watch?v=oPCbLsuqEqM">Kántor Tibor</a>, Rajcsányi Vilmos, Balogh Norbert, <a href="http://www.youtube.com/watch?v=Drb-fX95E5c">Keresztes ádám</a>, Tükör Gábor, <a href="http://www.youtube.com/watch?v=cWTPQ1GlVjg">Mészáros Kornél</a>, <a href="http://www.youtube.com/watch?v=MqbMQdo9d7U">Illés János</a>, <a href="http://www.adrive.com/public/d70dfbc857bc4a23b47632278df2dfbfc580f49db853af996b1c43dc10dd4364.html">Szebeni Szilveszter</a>, <a href="http://www.youtube.com/watch?v=0P3OdpMtfAg">Baski Attila</a>, <a href="http://www.youtube.com/watch?v=AXxzVUlD1hE">Koczka Tamás</a>, <a href="http://www.youtube.com/watch?v=ijcT-rgEn1s">Bozóki Szilárd</a>, <a href="http://www.youtube.com/watch?v=3quj9Z4z4n4">Medvey ádám</a>, <a href="http://www.vimeo.com/17802076">Dul Dávid</a>, <a href="http://www.youtube.com/watch?v=gD5O7QkFe0s">Leitner Szabolcs</a>, <a href="http://www.youtube.com/watch?v=MLSJJqJSTJU">Szabó Péter</a>, <a href="http://www.youtube.com/watch?v=0Pw6dAwJnYA">Pusztai Bálint</a>, <a href="http://www.youtube.com/watch?v=leyppEsXlBA">Dorjgotov Anudar</a>, <a href="http://www.youtube.com/watch?v=GOy0YkfVX2g">Lám István</a>, <a href="http://www.youtube.com/watch?v=J2KkOvtcDyM">Angeli Róbert</a>, <a href="http://www.youtube.com/watch?v=RuJ5HyDs7ac">Viniczay Dávid</a>, <a href="http://www.youtube.com/watch?v=QRYmO24v930">Schmidt Antonio</a>, <a href="http://www.youtube.com/watch?v=Jl98Sex8iJ8">Szabó Péter</a>, <a href="http://www.youtube.com/watch?v=sqGr83c-Wmc">Diószegi Tamás</a>, <a href="http://www.youtube.com/watch?v=xbKfyTICFJY">Fekete András</a>, <a href="http://www.youtube.com/watch?v=5gr0PaPmy_E">Hámos Gergely</a>, <a href="http://www.youtube.com/watch?v=g1OwRJmpTBU">Nagy Zoltán Adrián</a>, <a href="http://www.youtube.com/watch?v=a5tlCSaGlwA">Csontos Gábor</a>, <a href="http://www.youtube.com/watch?v=8qa4O2-kjww">Szabó András</a>, <a href="http://www.youtube.com/watch?v=SBvebXbMS6U ">Kiss Attila</a>, <a href="http://www.youtube.com/watch?v=OSmZG8xZ7tQ">Szabó Bálint István</a>, <a href="http://www.vimeo.com/17777999">Kovács Dávid Balázs</a>, <a href="http://www.youtube.com/watch?v=pR4s0l36Lj8">Lázár Endre</a>, <a href="http://www.youtube.com/watch?v=K3OXiWmB1NA">Vőneki Balázs</a>, <a href="http://www.youtube.com/watch?v=kdvCfgvV0Q4">Magyar Ferenc</a>, <a href="http://dl.dropbox.com/u/2693452/5_graf_hazi_ia10cq.avi">Bori András</a>, <a href="http://www.youtube.com/watch?v=O364bIJrLyI">Lenthár Gábor</a>, <a href="http://www.youtube.com/watch?v=IyVSnA82c-o">Kávássy Dániel</a>, <a href="http://www.youtube.com/watch?v=DZWrkixC3ck">Mikó Norbert</a>
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
- Egy feladatmegoldás (Nagy Máté)
- Egy másik feladatmegoldás (Mikeol)
- Egy harmadik feladatmegoldás (obrien)
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