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

Rohamcsiga (vitalap | szerkesztései)
Rohamcsiga (vitalap | szerkesztései)
1 063. sor: 1 063. sor:
** De mit jelent az, hogy a "közelébe"? Mennyire a közelébe? És a normál közelébe mennyivel gyengébb ez a hatás, mint pont a normálban.
** De mit jelent az, hogy a "közelébe"? Mennyire a közelébe? És a normál közelébe mennyivel gyengébb ez a hatás, mint pont a normálban.
** A lapok irányát egy harang görbe jellemzi. Hogy megtudjuk, hogy abba az irányba a lapok hányadrésze néz, ami a visszatükröződésnek kedvez, be kell helyettesítenünk a normál eloszlás sűrűségfüggvényébe. A képlet nem bonyolult, de van benne egy exponenciális függvény, aminek kiszámítása lassú. Viszont skaláris szorzattal egy koszinuszt ki tudunk számolni, ami egy picit hasonlít a haranggörbére. Ha a koszinusznak vesszük egy polinomját, pl az a*cos(x)^b, azzal nagyon jól közelíteni lehet a haranggörbét. Én ezt az ötlet fel fogom használni az implementációhoz, mert így az egy picit egyszerűbb.
** A lapok irányát egy harang görbe jellemzi. Hogy megtudjuk, hogy abba az irányba a lapok hányadrésze néz, ami a visszatükröződésnek kedvez, be kell helyettesítenünk a normál eloszlás sűrűségfüggvényébe. A képlet nem bonyolult, de van benne egy exponenciális függvény, aminek kiszámítása lassú. Viszont skaláris szorzattal egy koszinuszt ki tudunk számolni, ami egy picit hasonlít a haranggörbére. Ha a koszinusznak vesszük egy polinomját, pl az a*cos(x)^b, azzal nagyon jól közelíteni lehet a haranggörbét. Én ezt az ötlet fel fogom használni az implementációhoz, mert így az egy picit egyszerűbb.
* Az egyik lehetőség, hogy a visszaverődési normál (a fényből a felületi pontba menő, és az abból a szemünk felé mutató egységvektorok átlaga) és a tényleges felületi normál által bezárt szög koszinuszát használjuk. Az előadáson ez szokott elhangozni, mert ez az egyszerűbb módszer, de én egy másik lehetőséget fogok implementálni, mert én azt jobban szeretem.
* Először is ki kell tudnunk számolni, hogy 'N' normálvektorral rendelkező tükör merre ver vissza egy beérkező 'I' sugarat. A visszavert sugarat jelöljük 'R'-el. Azt tudjuk, hogy a három vektor egy síkban van, és a beesési szög megegyezik a visszaverődési szöggel. De mégse így fogunk számolni,  egyszerű vektor műveletekkel is ki lehet fejezni.
* Először is ki kell tudnunk számolni, hogy 'N' normálvektorral rendelkező tükör merre ver vissza egy beérkező 'I' sugarat. A visszavert sugarat jelöljük 'R'-el. Azt tudjuk, hogy a három vektor egy síkban van, és a beesési szög megegyezik a visszaverődési szöggel. De mégse így fogunk számolni,  egyszerű vektor műveletekkel is ki lehet fejezni.
http://http.developer.nvidia.com/CgTutorial/elementLinks/fig7_3.jpg
http://http.developer.nvidia.com/CgTutorial/elementLinks/fig7_3.jpg
1 074. sor: 1 075. sor:
</syntaxhighlight> <br/>
</syntaxhighlight> <br/>


* Ezt felhasználva 'R' legyen a visszaverődő fény, 'V' pedig a felületi pontból a szemünk felé mutató egységvektor.
* Ezt felhasználva legyen 'R' legyen a visszaverődő fény iránya, 'V' pedig a felületi pontból a szemünk felé mutató egységvektor.
* Ezeket felhasználva egy megfelelő a haranggörbét közelíthetjük e két vektor által bezárt szög koszinuszával is: <code>dot(R, V)</code>. Persze a negatív értékek nekünk nem jók és ennek még a polinómját is kell vennünk. A képlet így <code>specular_power = a * pow(max(0, dot(R, V)), shininess)</code>. Megjegyzés: az 'a' konstans elhagyható, az implicit benne lehet az anyagra jellemző spekuláris színben.
* A haranggörbét közelíthetjük e két vektor által bezárt szög koszinuszával is: <code>dot(R, V)</code>. Persze a negatív értékek nekünk nem jók és ennek még a polinómját is kell vennünk. A képlet így <code>specular_power = a * pow(max(0, dot(R, V)), shininess)</code>. Megjegyzés: az 'a' konstans elhagyható, az implicit benne lehet az anyagra jellemző spekuláris színben.
* A spekuláris anyag egyben diffúz is. A spekuáris megcsillanás (specular_power * specular_color) hozzáadódik a diffúz színhez.
* A spekuláris anyag egyben diffúz is. A spekuáris megcsillanás (specular_power * specular_color) hozzáadódik a diffúz színhez.
* Pl. irányfényforrásokra én így implementáltam.  
* Pl. irányfényforrásokra én így implementáltam.