Dette vedlegget er tilknyttet modul5 som har med lys og lysberegning å gjøre. Her gjøres en “manuell” kontrollregning av lysverdiene.
Gjennomgang 1
Bruker lysvektor = [1, 0, 0]
Her ser vi på eksempel /dell10/DiffuseSunCube1.html / .js når følgende
fargeverdier brukes:
- lysvektor = \([1, 0, 0]\)
- ambient lys = \([0.2, 0.2, 0.2]\)
- diffust lys = \([0.1, 0.8, 0.3]\).
- Kameraet er plassert i \([25, 60, 100]\)
Resultat:
For å kontrollere at det vi ser på skjermen stemmer med teorien skal vi nå regne ut refleksjonen som utgjøres av ambient og diffus belysning med de verdiene som ble oppgitt i eksemplet over.
Vi ser at kubens høyre side har en nyanse av grønn. For at vi skal kunne kontrollere mot beregnede verdier må vi finne RGB-verdier til denne grønnfargen.
Dersom man klipper ut en del av kuben som vi ser i nettleseren (f.eks. vha. Snipping tool i Windows) og limer inn i Paint. NET kan man måle/sample fargen vha. fargevelgeren i Paint .NET. På denne måten kan man finne RGB-verdiene. Se figuren under:
Her er grønnfargen til kubens høyre side valgt og gir RGB-verdi = \([76, 255, 127]\).
Vi regner ut og kontrollerer om vi får det samme. Her brukes kun ambient og diffuse lyskomponenter (ikke specular). Vi bruker fortsatt følgende formel:
\[ \text{Totalrefleksjon} = \text{ambient refleksjon} + \text{diffuse refleksjon} \]Ambient-delen er enkel:
\[ \text{Ambient refleksjon} = [0.2, 0.2, 0.2] \]Diffuse-delen av likninga krever mer regning:
\[ \begin{aligned} \text{Diffuse refleksjon} &= \text{diffust lys} \cdot \max(\cos\theta,\, 0) \\ &= [0.1, 0.8, 0.3] \cdot \max(\cos\theta,\, 0) \end{aligned} \]\(\cos\theta\) beregnes vha. prikkproduktet mellom normalvektor og lysvektor:
Normalvektor, \(\vec{n}\), for den grønne siden = \([1.0, 0.0, 0.0]\)
Lysvektor, \(\vec{L}\), = \([1.0, 0.0, 0.0]\)
Beregner \(\cos\theta\):
\[ \cos\theta = \frac{\vec{n}}{\left\lVert \vec{n} \right\rVert} \cdot \frac{\vec{L}}{\left\lVert \vec{L} \right\rVert} = \frac{(1,0,0)}{1} \cdot \frac{(1,0,0)}{1} = 1 \]Finner nå at:
\[ \text{Diffus refleksjon} = [0.1, 0.8, 0.3] \cdot \max(\cos\theta,\, 0) = [0.1, 0.8, 0.3] \cdot 1 = [0.1, 0.8, 0.3] \]Summerer vi dette med ambient refleksjon får vi:
\[ \text{Totalrefleksjon} = [0.2, 0.2, 0.2] + [0.1, 0.8, 0.3] = [0.3, 1.0, 0.5] \]Gjør vi dette om til verdier i området 0-255 (ved å multiplisere fargekomponenttallet med 255) får vi (avrundet):
\[ [76, 255, 127] \]Vi ser at dette stemmer med «målt» farge til kubens høyre side.
Gjennomgang 2
Bruker lysvektor [-10, 6, 10]
Endrer lysvektoren til \([-10, 6, 10]\) og gjør samme kontrollmåling som i gjennomgang 1. Resultatet skal bli slik:
Her brukes kun ambient og diffuse lyskomponenter (ikke specular).
Diffus refleksjon/farge for toppen av kuben
Dersom vi «måler» (sampler) fargen til toppen av kuben i figuren over, f.eks. vha. Paint .NET, får vi RGB-verdien:
Altså: \([61, 131, 81]\) som tilsvarer grønnfargen til toppen av kuben.
Vi regner ut for å kontrollere at vi får samme verdi, bruker følgende:
\[ \text{Totalrefleksjon} = \text{ambient refleksjon} + \text{diffuse refleksjon} \]Ambient-delen:
\[ \text{Ambient refleksjon} = [0.2, 0.2, 0.2] \]Diffuse-delen av likninga:
\[ \begin{aligned} \text{Diffuse refleksjon} &= \text{diffust lys} \cdot \max(\cos\theta,\, 0) \\ &= [0.1, 0.8, 0.3] \cdot \max(\cos\theta,\, 0) \end{aligned} \]Beregner \(\cos\theta\) vha. normalvektor og lysvektor:
Normalvektor, \(\vec{n}\), for toppen av kuben = \([0.0, 1.0, 0.0]\)
Lysvektor, \(\vec{L}\), = \([-10, 6.0, 10.0]\)
Beregner \(\cos\theta\):
\[ \cos\theta = \frac{\vec{n}}{\left\lVert \vec{n} \right\rVert} \cdot \frac{\vec{L}}{\left\lVert \vec{L} \right\rVert} = \frac{(0,1,0)}{(1)} \cdot \frac{(-10,6,10)}{\sqrt{236}} = 0{,}39057 \]Finner nå at:
\[ \begin{aligned} \text{Diffus refleksjon} &= [0.1, 0.8, 0.3] \cdot \max(\cos\theta,\, 0) \\ &= [0.1, 0.8, 0.3] \cdot 0{,}39057 \\ &= [0.039057, 0.312453, 0.117170] \end{aligned} \]Summerer vi dette med ambient refleksjon får vi:
\[ \begin{aligned} \text{Totalrefleksjon} &= [0.2, 0.2, 0.2] + [0.039057, 0.312453, 0.117170] \\ &= [0.239057, 0.512453, 0.317170] \end{aligned} \]Gjør vi dette om til verdier i området 0-255 (ved å multiplisere tallet med 255) får vi (avrundet):
\[ [61, 131, 81] \]og vi ser at dette stemmer med «målt» verdi.
Diffus refleksjon/farge for fronten av kuben
Vi måler (sampler) fargen til fronten av kuben og får RGB-verdien:
Altså: \([68, 184, 101]\) som tilsvarer grønnfargen til fronten av kuben.
Vi regner ut totalrefleksjonen, dvs. fargen, for fronten av kuben vha. følgende:
\[ \text{Totalrefleksjon} = \text{ambient refleksjon} + \text{diffuse refleksjon} \]Ambient-delen:
\[ \text{Ambient refleksjon} = [0.2, 0.2, 0.2] \]Diffuse-delen av likninga:
\[ \begin{aligned} \text{Diffuse refleksjon} &= \text{diffust lys} \cdot \max(\cos\theta,\, 0) \\ &= [0.1, 0.8, 0.3] \cdot \max(\cos\theta,\, 0) \end{aligned} \]Beregner \(\cos\theta\) vha. normalvektor og lysvektor:
Normalvektor, \(\vec{n}\), for fronten av kuben = \([0.0, 0.0, 1.0]\)
Lysvektor, \(\vec{L}\), = \([-10, 6.0, 10.0]\)
Beregner \(\cos\theta\):
\[ \cos\theta = \frac{\vec{n}}{\left\lVert \vec{n} \right\rVert} \cdot \frac{\vec{L}}{\left\lVert \vec{L} \right\rVert} = \frac{(0,0,1)}{(1)} \cdot \frac{(-10,6,10)}{\sqrt{236}} = 0{,}65094 \]Finner nå at:
\[ \begin{aligned} \text{Diffus refleksjon} &= [0.1, 0.8, 0.3] \cdot \max(\cos\theta,\, 0) \\ &= [0.1, 0.8, 0.3] \cdot 0{,}65094 \\ &= [0.065094, 0.520752, 0.195283] \end{aligned} \]Summerer vi dette med ambient refleksjon får vi:
\[ \begin{aligned} \text{Totalrefleksjon} &= [0.2, 0.2, 0.2] + [0.065094, 0.520752, 0.195283] \\ &= [0.265094, 0.720756, 0.395283] \end{aligned} \]Gjør vi dette om til verdier i området 0-255 (ved å multiplisere tallet med 255) får vi (avrundet):
\[ [68, 184, 101] \]og vi ser at dette stemmer med «målt» verdi.
Ingen kommentarer:
Legg inn en kommentar