20061207 G csoport
Ez az oldal a korábbi SCH wikiről lett áthozva.
Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!
Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.
Adott egy háromszög, csúcsai képernyőkoordinátákban: (11,11,0), (1,21,5), (21,31,8). A hozzájuk tartozó árnyalónormálok a világ koordináta rendszerben rendre (1,0,0), (0,1,0), (0,0,1). Az [1,1,1] irányból az RGB csatornákon (1,2,3) intenzitással fényforrás világít. A háromszög diffúz visszaverési tényezője ( 0.3, 0.2, 0.1). Milyen színű a (2,21) pixel, ha Phong-árnyalást alkalmazunk? (Tisztázza magában a Phong-árnyalás fogalmát! Ez itt nem Gouraud-árnyalás, sem Phong BRDF.) J -- SzaMa - 2006.12.09.
Skiz:
_(lásd süni 204. oldal)_
a(11,11,0)
b(1,21,5)
c(21,31,8)
n=(c-a) x (b-a) = [10 20 8] x [-10 10 5]= [20 -130 300]
C= n_x*a_x + n_y*a_y + n_z*a_z = 11*20+11*(-130)+ 0*300= -1210
Z(2,21)= (C-nx*2-ny*21)/nz = (-1210-20*2-21*(-130))/300= 74/15
P(2,21,74/15)
11a+b+21c=2 11a+21b+31c=21 +5b+8c=74/15 ---------------------- a=1/30 b=14/15 c=1/30
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \cos{\alpha} = \frac{(1/30, 14/15, 1/30) \cdot (1, 1, 1)}{|(1/30, 14/15, 1/30)| \cdot |(1, 1, 1)|} = \frac{1}{0.935 \sqrt{3}} }
R = cos(α) · 0.3 · 1
B = cos(α) · 0.2 · 2
G = cos(α) · 0.1 · 3
-- adamo - 2006.12.30.
Egy kicsit bővebben... :)
A feladat megoldásának elve (link): A Phong árnyalás arról szól, hogy van egy felületünk, és nem szeretnénk pontról pontra kiszámolni a színeket, ezért csalunk. Felbontjuk a felületet háromszögekre, és, hogy azért ne veszítsünk sokat, minden csúcspontban eltároljuk, hogy az eredeti felületnek ott mi a normálisa. Utána, ha kérdezik egy belső pont színet, akkor a normálist abban a pontban a csúcspontokban lévőkből számoljuk, majd a felület BRDF-jéből, a fény és nézeti irányból számoljuk a színt. Diffúz felulet esetén a BRDF-e konstans, ezt kell megszorozni a fényforrás intenzitásával és a normálvektor és a fényforrás felől mutató vektor coszinuszával. (Ha több fényforrásunk lenne, ezt kellene szummázni az egyes fényekre.) Mivel irányfényforrásunk van, így az intenzitása nem csökken a távolsággal. Tehát Phong algoritmusa nem a színeket, hanem a háromszög-csúcspontokban érvényes normálvektort interpolálja a háromszög felületén, és az illuminációs képletet minden pixelre külön kiértékeli.
<img src = "%ATTACHURLPATH%/phong.png"">
Tehát először meg kell határozni a pixel normálvektorát. A lineáris interpoláció során felhasznált módszer a következő. Meghatározzuk a Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P} ponton átmenő Y pászta metszéspontjait a háromszög oldalaival. A metszéspontok normálvektorát az oldalak csúcsainak normálvektorából interpoláljuk, majd a metszéspontok normálvektorait felhasználva számoljuk ki a belső Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P} pont normálvektorát.
A Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P_1} és Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P_3} pontok közötti oldal egyenlete:
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle (y - y_1)(x_2 - x_1) = (x - x_1)(y_2 - y_1)}
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle 10(y-11)=20(x-11)}
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle y=2x-11}
A Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P_1} és Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P_3} pontok közötti oldal és az Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle Y=21} pászta közötti metszéspont (Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle Q} ) koordinátái:
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle 21=2x-11}
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle Q=(16,21)}
A Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle Q} pont normálvektorát a Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P_1} és Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P_3} csúcspontok normálvektorából az alábbiak szerint számoljuk ki:
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle N_{x}^{Q} = u*N_{x}^{P_1} + (1-u)*N_{x}^{P_3}} ,
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle N_{y}^{Q} = u*N_{y}^{P_1} + (1-u)*N_{y}^{P_3}} ,
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle N_{z}^{Q} = u*N_{z}^{P_1} + (1-u)*N_{z}^{P_3}} .
Ahol az Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle u} azt adja meg, hogy melyik csúcs milyen súllyal szamít (természetesen a közelebbi jobban). Mivel a Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle Q} pont az oldal felezőpontja, ezért Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle u=\frac{1}{2}} . Ebből a Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle Q} normálvektora:
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle N_Q = (\frac{1}{2},0,\frac{1}{2})} .
A Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P} pont normálvektorát a Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle Q} és Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P_2} (mivel az Y pászta másik metszéspontja a második csúcs) pontok normálvektorából interpoláljuk:
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle N_{x}^{P} = u*N_{x}^{P_2} + (1-u)*N_{x}^{Q}}
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle N_{y}^{P} = u*N_{y}^{P_2} + (1-u)*N_{y}^{Q}}
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle N_{z}^{P} = u*N_{z}^{P_2} + (1-u)*N_{z}^{Q}}
Az Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle u} értéke ebben az esetben:
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle u=\frac{|PP_Q|}{|P_{2}{Q}|}=\frac{14}{15}} , ahol a számláló és a nevező a pontok alkotta szakaszok hossza. A Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P} normálvektora tehát:
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle N_P = (\frac{1}{30},\frac{14}{15},\frac{1}{30})} .
Megjegyzés: A fenti képletben szerintem Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle u=\frac{|{P}{Q}|}{|P_{2}{Q}|}=\frac{14}{15}}
. Ez az eredményen nem változtat, csak egy apró elírás.
Tehát Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle P_{2}}
súlya az interpolációban Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \frac{14}{15}}
, míg Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle Q}
súlya Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \frac{1}{15}}
-- Bandita - 2008.06.03.
Ezután ki kell számolni a beeső sugár és a normálvektor szögének koszinuszát. Legyen a fényforrás iránya L a normálvektor N.
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \cos\theta' = \frac{L \cdot N}{|L|*|N|} = \frac{(1*\frac{1}{30})+(1*\frac{14}{15})+(1*\frac{1}{30})}{(\sqrt{1^2+1^2+1^2})+(\sqrt{(\frac{1}{30})^2+(\frac{14}{15})^2+(\frac{1}{30})^2})} = \frac{5\sqrt{10}}{\sqrt{131}} \sim 1,3814} .
Végül a pixel színe:
Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle L = L_{in}*k_d*\cos\theta'=L_{(fény)}*k_d=[0.3,0.2,0.1]*[1,2,3]*1,3814 = [0.4144,0.5526,0.4144]}
<img src = "%ATTACHURLPATH%/szin.png"">
-- Samirello - 2007.01.02.
A bővebb megoldás végén mégsem ugyanaz az eredmény jön ki, mint az elsőben. Gondolom ez azért lehet, mert a Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \cos\theta'} -nál a nevezőben összeadás van a szorzás helyett. Addig ugyanis ugyanaz a részeredmény... Szerintem a szorzás a jó!
-- Atex - 2007.10.29.
Revízió: Miután ismét átnéztem a feladatot ismét, rájöttem, hülyeséget írtam, Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \vec{N}}
és Értelmezés sikertelen (SVG (a MathML egy böngészőkiegészítővel engedélyezhető): Érvénytelen válasz („Math extension cannot connect to Restbase.”) a(z) https://wikimedia.org/api/rest_v1/ szervertől:): {\displaystyle \vec{L}}
hossza semmiképpen nem egységnyi, ahhoz normálnunk kellene. Továbbá ahogy Atex mondta, a képletbe való behelyettesítés el van írva, ott szorzás lenne a helyes. Ha szorzunk ugyanazt az eredményt kapjuk, mint a skiz esetén, ami végülis a jó megoldás :)
-- Bandita - 2008.06.17.