„Számítógépes grafika házi feladat tutorial” változatai közötti eltérés

Rohamcsiga (vitalap | szerkesztései)
aNincs szerkesztési összefoglaló
Rohamcsiga (vitalap | szerkesztései)
a Az első két házi példaprogramjait migráltam pastebinről
272. sor: 272. sor:
* Projekció 2D-ben: a fényképezés módja nagyon egyszerű, egyszerűen eldobjuk a 'z' koordinátát, és az x-y pozíció alapján rajzolunk. Vagy legalábbis ezt csináltuk eddig, de az NDC nem volt kényelmes. Itt viszont lehetőséget kapunk saját koordináta-rendszer megválasztására, ahol az egység lehet pl. 1 méter, és a kamera pedig mondjuk követhet egy karaktert egy játékban.
* Projekció 2D-ben: a fényképezés módja nagyon egyszerű, egyszerűen eldobjuk a 'z' koordinátát, és az x-y pozíció alapján rajzolunk. Vagy legalábbis ezt csináltuk eddig, de az NDC nem volt kényelmes. Itt viszont lehetőséget kapunk saját koordináta-rendszer megválasztására, ahol az egység lehet pl. 1 méter, és a kamera pedig mondjuk követhet egy karaktert egy játékban.


* Példaprogram: [http://pastebin.com/d8ZLKiTg Sidescroller]
* Példaprogram: [[Média:Grafpp_sidescroller.cpp|Sidescroller]]


<br/> <syntaxhighlight lang="c">
<br/> <syntaxhighlight lang="c">
308. sor: 308. sor:
* Egy transzformáció meghívásakor annak a mátrixa hozzászorzódik a GL_MODELVIEW mátrixhoz (balró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.
* Egy transzformáció meghívásakor annak a mátrixa hozzászorzódik a GL_MODELVIEW mátrixhoz (balró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 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.
* 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:]
* [[Média:Grafpp_transzf_sorrend.cpp‎|Példa a transzformációk sorrendjére]]:
<br/> <syntaxhighlight lang="c">  
<br/> <syntaxhighlight lang="c">  
glTranslatef(2.7f, -3.1f, 0.0f);  
glTranslatef(2.7f, -3.1f, 0.0f);  
321. sor: 321. sor:
- Intuitív, pontosan az történik, mint amit a kódról első ránézésre hinnénk, hogy csinál, az origó a transzformáció után a (2.7, -3.1) pontba kerül, a nagyítás az x tengely mentén 2, az y tengely mentén 2.5. <br/> <br/>
- Intuitív, pontosan az történik, mint amit a kódról első ránézésre hinnénk, hogy csinál, az origó a transzformáció után a (2.7, -3.1) pontba kerül, a nagyítás az x tengely mentén 2, az y tengely mentén 2.5. <br/> <br/>


* [http://pastebin.com/Hn9nfGwb Egy másik lehetséges sorrend:]
* [[Média:Grafpp_transzf_sorrend2.cpp‎|Egy másik lehetséges sorrend]]:
<br/> <syntaxhighlight lang="c">
<br/> <syntaxhighlight lang="c">
glScalef(2, 2.5f, 1);  
glScalef(2, 2.5f, 1);  
395. sor: 395. sor:
** Technikailag a 3D rajzolást rábízzuk a glut-ra.
** Technikailag a 3D rajzolást rábízzuk a glut-ra.
*** Kizárólag a <code> glutSolidCube(GLdouble size); </code> függvényt fogjuk használni.
*** Kizárólag a <code> glutSolidCube(GLdouble size); </code> függvényt fogjuk használni.
*** Ez a függvény - nem meglepő módon - egy 'size' élhosszúságú [http://pastebin.com/HJKcgBsA kockát rajzol ki]:
*** Ez a függvény - nem meglepő módon - egy 'size' élhosszúságú [[Média:Grafpp_glutSolidCube.cpp‎|kockát rajzol ki]]:
<div style="text-align:left;margin:0px auto;">
<div style="text-align:left;margin:0px auto;">
http://i.imgur.com/PA2A3eQ.png
http://i.imgur.com/PA2A3eQ.png
</div><br/>
</div><br/>


* Ezt felhasználva a példaprogram: [http://pastebin.com/dw7jBHxH Robot kar]
* Ezt felhasználva a példaprogram: [[Média:Grafpp_robot_kar.cpp|Robot kar]]
** A program irányítása:  
** A program irányítása:  
*** 'q' - Ujjak szétnyitása, 'a' - Ujjak összezárása
*** 'q' - Ujjak szétnyitása, 'a' - Ujjak összezárása
544. sor: 544. sor:
**** Gyakori implementációja a közelítőleg c2 folytonos Catmull-Rom görbe (Ezt akkor kapjuk, ha a Kochanek–Bartels összes paraméterét nullának választjuk).   
**** Gyakori implementációja a közelítőleg c2 folytonos Catmull-Rom görbe (Ezt akkor kapjuk, ha a Kochanek–Bartels összes paraméterét nullának választjuk).   
        
        
* Példaprogram: [http://pastebin.com/iJW80B4t Tenziós Catmull-Rom görbe]
* Példaprogram: [[Média:Grafpp_tcr_gorbe.cpp|Tenziós Catmull-Rom görbe]]
<div style="text-align:left;margin:0px auto;">
<div style="text-align:left;margin:0px auto;">
http://i.imgur.com/C1iKaHx.gif
http://i.imgur.com/C1iKaHx.gif