31.10.2013 Aufrufe

Download - Benjamin Granzow Portfolio

Download - Benjamin Granzow Portfolio

Download - Benjamin Granzow Portfolio

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!