Download - Benjamin Granzow Portfolio
Download - Benjamin Granzow Portfolio
Download - Benjamin Granzow Portfolio
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
4.2. KLASSIFIZIERUNG 32<br />
tauschbar und ist nicht fest im Code verankert. Dieses ist soweit relevant,<br />
dass die Interaktion mit der Darstellung ermöglicht wird, abhängig von<br />
den gewünschten Informationen können unterschiedliche Transferfunktionen<br />
(Texturen) geladen werden, um die Visualisierung anzupassen.<br />
Um eine Transferfunktion im Fragmentshader zu verwenden, wird diese einfach<br />
als zusätzliche Textur übergeben. Für die sinnvolle Nutzung dieser, ist<br />
noch ein Anwendungsbereich (fromIndex, toIndex) zu verwenden. Auf diesen<br />
Bereich wird die Transferfunktion skaliert und angewendet. Ist ein Dichtewert<br />
unter- oder oberhalb des Bereiches, wird der Minimal- bzw. Maximalwert<br />
verwendet.<br />
In Wirklichkeit ist die Funktion nur eine 1D-Funktion, aber technisch muss<br />
diese in unserem Fall als 2D-Textur umgesetzt werden, da OpenGL ES nur<br />
2D-Texturen unterstützt. Aus diesem Grund wird die Transferfunktionstextur<br />
mit der Höhe 1 umgesetzt und im Fragment Shader dann auf dem<br />
Höhenwert 0.5 ausgelesen, um sicher einen gültigen Farbwert zu erhalten.<br />
varying vec3 textCoord ;<br />
uniform sampler2D t e x t u r e 0 ;<br />
uniform sampler2D t e x t u r e 1 ;<br />
// K l a s s i f i z i e r u n g<br />
uniform sampler2D t r a n s f e r F u n c t i o n ;<br />
uniform f l o a t fromIndex ;<br />
uniform f l o a t toIndex ;<br />
void main ( void )<br />
{<br />
f l o a t mixSample , sample0 , sample1 ;<br />
sample0 = texture2D ( texture0 , textCoord . xy ) . r ;<br />
sample1 = texture2D ( texture1 , textCoord . xy ) . r ;<br />
mixSample = mix ( sample0 , sample1 , textCoord . z ) ;<br />
// Ab den Randwerten bekommt a l l e s den oberen oder unteren Wert<br />
zugewiesen , dazwischen wird d i e Funktion auf den Bereich<br />
s k a l i e r t<br />
i f ( mixSample < fromIndex ) {<br />
mixSample = 0 . 0 ;<br />
} e l s e i f ( mixSample > toIndex ) {<br />
mixSample = 1 . 0 ;<br />
} e l s e {<br />
mixSample = ( mixSample−fromIndex ) /<br />
( toIndex−fromIndex ) ;<br />
}<br />
g l F r a g C o l o r = texture2D ( t r a n s f e r F u n c t i o n , vec2 ( mixSample , 0 . 5 ) ) ;<br />
}<br />
Listing 4.6: Fragment Shader mit Transferfunktion