„Számítógépes grafika házi feladat tutorial” változatai közötti eltérés
| 302. sor: | 302. sor: | ||
=== Transzformációk === | === Transzformációk === | ||
* GL_MODELVIEW egyik legfontosabb használata, hogy segítségével | * GL_MODELVIEW egyik legfontosabb használata, hogy segítségével könnyebben tudjuk elhelyezni az objektumokat a világban. Például ha van egy összetett, mondjuk 10 000 háromszögből álló alakzatunk, akkor annak elforgatását manuálisan úgy tudnánk megoldani, hogy az alakzat összes pontján elvégzünk valami undorító trigonometrikus képletet. Egy másik lehetőség, hogy a GL_MODELVIEW segítségével az egész világot elforgatjuk az ellenkező irányba, kirajzoljuk az alakzatot normál állapotában, majd visszaforgatjuk a világot. Ez első ránézésre bonyolultabbnak tűnik, de mindössze 2 sor kód. | ||
* A világ transzformálásához használható függvények: | * A világ transzformálásához használható függvények: | ||
** <code> glTranslatef(GLfloat x, GLfloat y, GLfloat z); </code> | ** <code> glTranslatef(GLfloat x, GLfloat y, GLfloat z); </code> | ||
| 309. sor: | 309. sor: | ||
* A projekciós mátrixot állító függvényekkel ellentétben, ezeket akkor is szoktuk használni, ha a modellezési mátrix nem egységmátrix. | * A projekciós mátrixot állító függvényekkel ellentétben, ezeket akkor is szoktuk használni, ha a modellezési mátrix nem egységmátrix. | ||
* Ezen függvényeknek tetszőleges kombinációját lehet használni, de a sorrend nem mindegy. | * Ezen függvényeknek tetszőleges kombinációját lehet használni, de a sorrend nem mindegy. | ||
* Egy transzformáció meghívásakor annak a mátrix hozzászorzódik a GL_MODELVIEW mátrixhoz (jobbról). Emlékeztető: a mátrix szorzás, és a mátrix-vektor szorzás asszociatív. Ez azt jelenti, hogy két transzformációs mátrix összeszorzása után az eredmény ugyan úgy transzformál egy tetszőleges vektort, mint ha a két | * Egy transzformáció meghívásakor annak a mátrix hozzászorzódik a GL_MODELVIEW mátrixhoz (jobbról). Emlékeztető: a mátrix szorzás, és a mátrix-vektor szorzás asszociatív. Ez azt jelenti, hogy két transzformációs mátrix összeszorzása után az eredmény ugyan úgy transzformál egy tetszőleges vektort, mint ha a két mátrixszal külön szoroztuk volna be. | ||
* A transzformációk fordított sorrendben fejtik ki hatásukat, mint ahogy meghívjuk őket, de ez így intuitív, így haladhatunk a | * A transzformációk fordított sorrendben fejtik ki hatásukat, mint ahogy meghívjuk őket, de ez így intuitív, így haladhatunk a hierarchiában föntről lefele, ha nem így lenne, akkor pl. egy autó kirajzolásánál, azzal kéne kezdenünk, hogy megmondjuk, hogy a dísztárcsa a kerékhez képest hogy helyezkedik el, és csak a legvégén mondhatnánk meg, hogy az autó egyáltalán hol van. | ||
* [http://pastebin.com/0UiK3fVa Példa a transzformációk sorrendjére:] | * [http://pastebin.com/0UiK3fVa Példa a transzformációk sorrendjére:] | ||
<br/> <syntaxhighlight lang="c"> | <br/> <syntaxhighlight lang="c"> | ||
| 318. sor: | 318. sor: | ||
</syntaxhighlight> <br/> | </syntaxhighlight> <br/> | ||
Ami a | Ami a koordináta-rendszerrel történik: | ||
<div style="text-align:left;margin:0px auto;"> | <div style="text-align:left;margin:0px auto;"> | ||
http://i.imgur.com/gUqk4pi.gif | http://i.imgur.com/gUqk4pi.gif | ||
| 339. sor: | 339. sor: | ||
* Tanulság: általában az eltolás - forgatás - nagyítás sorrendet szeretjük. Ez nem jelenti azt, hogy más sorrendnek ne lenne értelme, vagy egy konkrét problémának ne lehetne egyszerűbb megoldása másmilyen sorrendet használva. | * Tanulság: általában az eltolás - forgatás - nagyítás sorrendet szeretjük. Ez nem jelenti azt, hogy más sorrendnek ne lenne értelme, vagy egy konkrét problémának ne lehetne egyszerűbb megoldása másmilyen sorrendet használva. | ||
* A probléma ami felmerül, hogy a transzformációk hatása permanens, azaz, ha egyszer elforgattad a világot, akkor az úgy marad, amíg vissza nem forgatod. Tehát ha egy objektum kirajzolása miatt akarsz | * A probléma ami felmerül, hogy a transzformációk hatása permanens, azaz, ha egyszer elforgattad a világot, akkor az úgy marad, amíg vissza nem forgatod. Tehát ha egy objektum kirajzolása miatt akarsz használni egy transzformációt akkor a rajzolás után azt mindenképpen, mindig vissza is kell csinálnod. De mi van ha egy összetett objektum kirajzolásához akár több száz transzformáció is kellet? Akkor a végén az összeset egybe vissza kell csinálni? Nincs erre jobb megoldás? A válasz természetesen az, hogy van, ez a megoldás a mátrix stack. | ||
=== Matrix stack === | === Matrix stack === | ||