Féléves feladat =============== Minimális elvárások az elkészített programmal szemben ----------------------------------------------------- * **Kamerakezelés**: A virtuális teret az egér és/vagy billentyűzet segítségével be kell tudni járni. * **Objektumok**: Térbeli objektumok legyenek. Ezeket, mint modelleket külön fájlból lehessen betölteni. * **Animáció, mozgatás**: A program legyen interaktív. A modelleket, fényeket billentyűzettel, egérrel lehessen mozgatni; legyenek animált részek. * **Textúrák**: A modelleknek legyen textúrája. * **Fények**: A programban a fényeket a ``+`` és ``-`` billentyűk segítségével lehessen állítani (vagy egyéb kézenfekvő módon a program leírása alapján). * **Használati útmutató**: Az ``F1`` gomb megnyomására (vagy egyéb kézenfekvő módon) jelenjen megy egy leírás a programról, annak használatáról, kezelési módjáról. Az elkészített programnak jól strukturáltnak, következetesnek kell lennie. Törekedni kell arra, hogy a modellek, a kezelés kidolgozott, a megjelenítés esztétikus legyen. Ezek a minimális elvárások a programmal szemben. Amennyiben ezek teljesülnek, úgy a feladat már elégséges. Többlet funkciók ---------------- A jobb jegyért például az alábbi dolgokat lehet a programban megvalósítani. * **Bonyolultabb animációk**: Például karakterek animálása, görbék mentén mozgatás. * **Fizika**: Például ingák, rugózás, szövet, víz. * **Részecskerendszerek**: Például Tűz, füst, eső, hóesés. * **AI**: Táblás játékok esetén kézenfekvő, egyéb játékoknál ellenfelek vezérlése például. * **Köd**: Köd hatás megvalósítása, dinamikus változtatása. * **Átlátszóság**: Átlátszó részeket tartalmazó textúrák alkalmazása, félig áttetsző részek a megjelenített objektumokon. * **Árnyék**: Árnyékszerű hatások létrehozása. * **Ütközésvizsgálat**: Bounding-box implementáció valamilyen formája. * **Stencil buffer használata**: Nem téglalap alakú képterületek megvalósításához. * **Felhasználói felület**: A paraméterek állításához külön felületi elemek. * **Objektumok kijelölése egérrel**: A megjelenített objektumok kijelölése. * **Térkép kezelése**: Például magasságmező betöltése képfájlból úgy, hogy adott modellek helyét is meg lehessen adni rajta. * **Procedurális geometria, textúrák**: Modellek létrehozása valamilyen algoritmus segítségével. * **LOD**: *Level of Details* a hatékonyabb megjelenítéshez. * **Bump mapping, displacement mapping**: Képek használata a felületi érdesség tárolásához, megjelenítéséhez. * **Environment mapping**: Környezetről készített kép használata textúraként, az ahhoz tartozó transzformációk megvalósítása. * **Sztereoszkópia**: Például renderelés valamilyen 3D-s megjelenítő eszközhöz. Minden így elkészített plusz funkció 1-gyel növeli az érdemjegyet (5-ben maximálva). Mindenkinek javaslom, hogy legalább 3 plusz dolgot építsen be a programjába. Programmal és beküldésével kapcsolatos észrevételek --------------------------------------------------- * A program forráskódjának ``make`` paranccsal lefordítható formában kell szerepelnie a repository-ban. * A programhoz tartozó adatokat egy ``assets`` nevű jegyzékbe kell elhelyezni. * Az ``assets`` jegyzéket tömörítve valahová fel kellene tenni (például: saját weboldal, DropBox, OneDrive), nem pedig csatolmányként küldeni. Ennek a linkjét a ``README.md`` fájlban kell feltüntetni. * A project mérete kitömörítést követően a 200 MByte-ot lehetőleg ne haladja meg. * A textúrákhoz PNG vagy JPEG formátumú fájlokat érdemes használni. * A ``main`` függvényt tartalmazó fájl neve ``main.c`` legyen. * A forráskódban az elnevezéseknek angolul kell szerepelni. * Minimális számú globális változót kell használni. * A fejléc állományokba dokumentált formában kerüljön az interfészek leírása. A forrásállományba ideális esetben nem szükségesek megjegyzések. * A kódban a repeptitív, adattárolásra emlékeztető kódrészeket külön adatszerkezetbe, adatfájlba kell kiszervezni (például CSV fájlokba). * Törekedni kell arra, hogy a program figyelmeztetések (*warning*) nélkül forduljon. * Ha a forráskódhoz tartozik valamilyen külső forrásból származó kódrész, akkor azt a megfelelő licensz feltüntetése mellett lehet használni! Gyakori hibák ------------- * Nem került kiválasztásra a feladat. Először egy részletes, konkrétumokat tartalmazó, szöveges leírásnak kell készülnie a féléves feladathoz, ami hogy ha az egyeztetéseket követően rendben van, akkor kellene egyáltalán hozzákezdeni a feladat elkészítéséhez. * A kiválasztandó feladat mögött nincs koncepció. Néhány, a semmi, vagy egy textúrázott kocka közepén mozgó, forgó objektum önmagában még nem egy túl átgondolt, kiforrott témára utal. * A program és a repozitórium szerkezete nem megfelelő. * Nem a modellbetöltő statikus függvénykönyvtár került felhasználásra. * Túlságosan sok a globális változó. * A program szerkezete, a forráskódhoz tartozó állományok nem tükrözik, hogy konkrétan miről szólna a választott feladat. (A programoknak OOP szemlélettel kellene készülniük.) * A program ablakát nem lehet átméretezni az arányok megtartása mellett. * A program azt az ``Actions`` struktúrát tartalmazza, amire vonatkozóan már rendszeresen említésre került, hogy az nem jó megoldás. * A programban az objektumokon indokolatlan helyeken át lehet menni. * Az animáció nem idő függvényében, hanem a kirajzolás számának megfelelően változik. * A betöltött modellek, textúrák esetében az útvonalak nem átvihetőek. (A *backslash* és a kis-nagybetű különbségek szoktak ilyen problémát okozni.) * A program túlságosan sok repetitív részt tartalmaz. Azokat modellek betöltésével, ``for`` ciklus használatával lehet tipikusan orvosolni. * Nem látszanak a programban a fényhatások. * Nem megfelelő a programban a fények átállítása. Úgy néz ki, mint hogy ha csak a monitor fényerejét állítgatná a felhasználó. * Nem került bemutatásra a program. Hogy ha minden előzmény, korábbi bemutatás nélkül érkezik be egy feladat, az olyan formában még nem fogadható el. (A feladat elkészítésének az a célja, hogy az illető bizonyítsa, hogy a grafikus programozásban gyakorlatot szerzett, az annak kapcsán felmerülő kérdéseket érdemben meg tudja válaszolni.)