„Számítógépes grafika házi feladat tutorial” változatai közötti eltérés
| 1 145. sor: | 1 145. sor: | ||
=== A tökéletes tükör === | === A tökéletes tükör === | ||
A mikroszkopikus tükrök figyelembevételével a fényforrások fénye tükröződni tud. De mi van a valódi tükrökkel? Amikben más objektumok képeit is látjuk, nem csak a fényforrások hatását? Sugárkövetéssel ilyen tükröket renderelni meglepően egyszerű. Az egyetlen dolog amit a tükör tulajdonságú anyag csinál a modellünkbe az az, hogy a tükröződés irányába továbblövi a sugarat. | |||
Implementálni ezt nagyon egyszerű, pl.: | |||
<br/> <syntaxhighlight lang="c"> | <br/> <syntaxhighlight lang="c"> | ||
| 1 158. sor: | 1 159. sor: | ||
</syntaxhighlight> <br/> | </syntaxhighlight> <br/> | ||
Az egyetlen kényelmetlenséget az okozhatja, hogy ha az eddig használt adatstruktúránk nem tárolta, hogy milyen irányból érkezett a sugár, mert az nyilván kell ahhoz, hogy tudjuk, hogy melyik irányba verődik vissza. | |||
Például ha a padló anyagát lecserélem egy tükörre, akkor az eredmény így néz ki: | |||
http://i.imgur.com/jDLtIv8.png | http://i.imgur.com/jDLtIv8.png | ||
Ez valóban egy tükörnek néz ki, de egy apró probléma még akad vele... Mi történik ezzel a modellel, ha két tükröt rakunk egymással szembe? A sugár a végtelenségig fog pattogni a kettő között? Nem egészen. Ugyanis ez egy rekurzív algoritmus, ahol a függvényhívásoknak a stackbe is lesz nyoma, ahol viszont a hely előbb utóbb elfogy, és ilyenkor a programunk megáll. | |||
A sugárkövető függvényünkbe követnünk kell, hogy ez hanyadik függvényhívás volt, és ha ez a szám, meghalad valamilyen értéket, pl. 8-at, akkor a sugarat már ne lőjük tovább. | |||
<br/> <syntaxhighlight lang="c"> | <br/> <syntaxhighlight lang="c"> | ||
| 1 178. sor: | 1 182. sor: | ||
</syntaxhighlight> <br/> | </syntaxhighlight> <br/> | ||
Példaprogram: [[Média:Grafpp_raytrace_tukrok.cpp|Két szemben lévő tükör]] | |||
http://i.imgur.com/5EcYwj6.png | http://i.imgur.com/5EcYwj6.png | ||