Feladattal kapcsolatos tudnivalók
Alapvető elvárások a feladattal 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. - Help: Az
F1
gomb megnyomására jelenjen megy egy help menü, ami információt ad a programról, annak kezelési módjáról.
Ezek a minimális elvárások a programmal szemben. Ezeken kívül 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
- Árnyék
- Ütközésvizsgálat: Bounding-box implementáció valamilyen formája
- Stencil buffer használata
- Felhasználói felület: A paraméterek állításához külön felületi elemek (GLUI használatával, vagy saját megvalósítás OpenGL-ben.)
- Objektumok kijelölése egérrel
- 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
- LOD: Level of Details a hatékonyabb megjelenítéshez
- Bump mapping
- Environment mapping
- Sztereoszkópia: Például renderelés valamilyen 3D-s megjelenítő eszközhöz
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.
Gyakorlatok
1. Fejlesztőkörnyezet beüzemelése
2. Statikus és dinamikus memóriakezelés
- A
malloc
függvény működése - Program fordításának lépései
3. Mátrix kezeléséhez struktúra és függvények implementálása
- mátrixok összeadása
- mátrix szorzása skalárral
- mátrixok szorzása
- Transzformációs mátrixok létrehozása (eltolás, elforgatás, skálázás)
- Írni példákat egy homogén koordinátákkal megadott pont különféle transzformációira. (Lehetőleg minden elkészített függvényre legyen benne példa.)
4. Eseményvezérelt program készítése
Az alábbiakhoz hasonló programokat kellene készíteni.
- Egérkattintás és egérkurzor mozgatás kiíratása.
- Sakktábla kirajzolása.
- Egérkurzor készítése (például háromszöggel)
- Töröttvonal rajzolása ahol a pontok egérkattintással vannak megadva.
- Egérkurzor pozíciójának függvényében változó színek.
- Egér kattintás helyére alakzatok (például háromszögek kirajzolása)
- Kirajzolt elemek, amelyek egyszerre mozognak.
- Egérrel mozgatható téglalapok.
- Négyzetrácsos háttér kirajzolása.
- Színes példák háromszög szalagok rajzolására.
5. Kamerabeállítás, modelltranszformációk
- Az ablak létrehozásánál szereplő négyszöges példa fordítása, futtatása.
- Egy rögzített képarány megtartása
- Kamera helyzetének módosítása.
- A
glut.h
header tartalmának megtekintése. - Billentyűesemények kezelése
- Teáskannak kirajzolása
6. Modellbetöltés, megjelenítés
- Fordítsuk és futtassuk le a flat_model.zip fájlban lévő programot!
- Cseréljük ki a házat a
kocka.obj
-ben lévő modellre! - Nézzük meg, hogy a modell adatai hogyan kerülnek tárolásra az OBJ fájlokban!
- Módosítsuk a megjelenített modell színét és pozícióját!
- Töltsük be és jelenítsük meg egyszerre a kocka és a ház modelljét!
7. Fények, anyagjellemzők, átlátszóság
- Fordítsuk és futtassuk le a teapots.zip fájlban lévő programot.
- Vizsgáljuk meg az aktuális fény és anyagjellemző beállításokat.
- Állítsuk át a megjelenített objektumok anyagának jellemzőit!
- Állítsunk be billentyűket a felület csillogósságának (shineness) növelésére/csökkentésére.
- Világítsuk meg az anyag színétől lényegesen eltérő színnel a felületeket. (Például kék anyagot sárga színnel.)
- Jelöljük ki egy objektummal (például gömbbel) a fényforrás aktuális helyét!
- Mozgassuk a fényforrást billentyűzet segítségével!
- Adjunk meg különböző színű és paraméterezésű fényforrásokat!
8. Képbetöltés, textúrázás
- Töltsük le és fordítsuk le a fox.zip állományban lévő programot.
- Jelenítsünk meg néhány háromszöget és négyszöget, amelyen a rókás kép szerepel a többi mellett.
- Készítsünk egy programot, amellyel egy textúrázott kockát jelenítünk meg. A kocka minden lapján legyen más textúra, viszont azok egyetlen egy képfájlból származzanak.
- Fordítsuk és futtassuk le az uv_map.zip programot, és vizsgáljuk meg a segítségével, hogy hogy történik a textúraleképzés.
- Jelenítsünk meg egy egyszerű képkeretet, amiben gombnyomásra lehet váltogatni az éppen megjelenített képet.
OpenGL programozás segédlet
C / GLUT
Leírások kódpéldákkal
- Ablak létrehozása
- Kamerakezelés
- Modellek
- Textúrák
- Fények
- Anyagjellemzők
- Magasságmező
- Időzítés
- Részecskék
- OBJ fájl betöltése: http://www.kixor.net/dev/objloader/
- Wikipedia: https://en.wikipedia.org/wiki/OpenGL_Utility_Toolkit
- Samples: https://www.opengl.org/archives/resources/code/samples/glut_examples/examples/examples.html
- OpenGL: http://www.math.ucsd.edu/~sbuss/MathCG/OpenGLsoft/
- Samples: http://cs.lmu.edu/~ray/notes/openglexamples/
- Samples: http://openglsamples.sourceforge.net/projects/index.php/blog/index/
- GLUT samples: http://home.pacific.net.hk/~edx/glutsamples.htm
- GLUT samples: https://github.com/chunkyguy/GLUT_samples
- Image libraries: https://www.opengl.org/wiki/Image_Libraries
- Textures: https://en.wikibooks.org/wiki/OpenGL_Programming/Intermediate/Textures
- Loading PNG: https://blog.nobel-joergensen.com/2010/11/07/loading-a-png-as-texture-in-opengl-using-libpng/
- Tutorial: https://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_06
- Fények és anyagjellemzők beállítása: http://falloutsoftware.com/tutorials/gl/gl8.htm.