Download - Benjamin Granzow Portfolio
Download - Benjamin Granzow Portfolio
Download - Benjamin Granzow Portfolio
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
4.3. BELEUCHTUNG 35<br />
vec3 blinnPhong ( vec3 n , vec3 v , vec3 l )<br />
{<br />
// M a t e r i a l i e n<br />
vec3 kAmbient = vec3 ( 0 . 1 ) ; // Ambient<br />
vec3 k D i f f u s e = vec3 ( 0 . 6 ) ; // Defuse<br />
vec3 kSpecular = vec3 ( 0 . 2 ) ; // Spekular<br />
f l o a t s h i n i n e s s = 1 0 0 . 0 ; // R e f l e x i o n s f a k t o r<br />
// Licht<br />
vec3 ambientLight = vec3 ( 0 . 3 ) ;<br />
vec3 l i g h t C o l o r = vec3 ( 1 . 0 ) ;<br />
// Ambienter T e i l<br />
vec3 ambient = kAmbient* ambientLight ;<br />
// Halfway−Vektor zwischen Licht− und Betrachtungsrichtung<br />
vec3 h = normalize ( l+v ) ;<br />
// Defuser T e i l<br />
f l o a t d i f f u s e L i g h t = max( dot ( l , n ) , 0 ) ;<br />
vec3 d i f f u s e = k D i f f u s e * l i g h t C o l o r * d i f f u s e L i g h t ;<br />
// S p e k u l a r e r T e i l<br />
f l o a t s p e c u l a r L i g h t = pow(max( dot (h , n ) , 0 ) , s h i n i n e s s ) ;<br />
vec3 s p e c u l a r = kSpecular * l i g h t C o l o r * vec3 ( s p e c u l a r L i g h t ) ;<br />
// Aufsummieren der E i n z e l t e i l e<br />
r e t u r n ambient+d i f f u s e+s p e c u l a r ;<br />
}<br />
Listing 4.7: Blinn-Phong Methode im Fragmentshader<br />
4.3.2 Gradient Berechnung<br />
Bei der Beleuchtung von Volumengrafiken kommt ein großes Problem auf.<br />
Anders als bei oberflächenbasierten Objekten ist es bei Volumendaten nicht<br />
einfach möglich eine Normale anzugeben. Da keine Flächen oder Abhängigkeiten<br />
zu den benachbarten Daten vorhanden sind, kann ausgehend vom<br />
betrachteten Punkt keine eindeutige Orientierung angegeben werden. Für<br />
die Beleuchtungsberechnung ist eine Oberflächenorientierung aber unerlässlich,<br />
da an dieser der zusätzliche Lichtanteil der Lichtquelle bemessen wird.<br />
Um so etwas wie eine Orientierung zu erhalten, kann die Steigung (Gradient)<br />
der Dichtewerte an der betroffenen Position auswerten werden. Damit<br />
der Gradient dem Wert an der gesuchten Position entspricht, ist es nötig,<br />
diesen aus den umliegenden Daten zu bilden. Dafür wird in jeder Dimension<br />
einfach die Differenz zwischen den umliegenden Daten gebildet. Wenn der<br />
Wert an der Position x i + 1 mit dem Wert bei x i − 1 subtrahiert wird, ergibt<br />
sich daraufhin eine diskrete Approximation für den gesuchten Gradienten