31.10.2013 Aufrufe

Download - Benjamin Granzow Portfolio

Download - Benjamin Granzow Portfolio

Download - Benjamin Granzow Portfolio

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

4.1. 2D TEXTURE-SLICED VOLUMEN RENDERING 24<br />

Damit dies nicht passiert, müssen die Ebenen abhängig der Blickrichtung<br />

des Benutzers angepasst werden. Ab einer Blickrichtungsänderung von 45 ◦<br />

muss die Ebenenausrichtung so verändert werden, dass diese wieder frontal<br />

zum Betrachter steht. Wird das auf allen Achsen beachtet, wird bei einer<br />

beliebigen Rotation immer eine konsistente Darstellung entstehen. Dieses ist<br />

im b) Zweig der Abbildung 4.1 dargestellt.<br />

Da abhängig von der Blickrichtung nun verschiedene Ansichten der Daten<br />

benötigt werden, ist es notwendig, diese anfänglich zur Verfügung zu stellen.<br />

Dafür wird für jede der drei Achsen ein eigener Datensatz benötigt, zwischen<br />

welchen bei Bedarf gewechselt werden kann.<br />

4.1.2 Einzelne Textur<br />

Um das Volumen Rendering Integral 2.3 hardwarebeschleunigt nachzubilden,<br />

wird auf die Arbeitsweise des Framebuffers der Grafikkarten-Pipeline<br />

zurückgegriffen. Damit dieses aber funktioniert, ist es notwendig, die Ebenen<br />

von Hinten nach Vorne (back-to-front) zu zeichnen, damit diese aufsummiert<br />

werden können. Die nähere Beschreibung dieses Verfahrens wird unter 4.1.4<br />

Zusammensetzung im Framebuffer erläutert.<br />

Im nachfolgenden Listing 4.1, wird eine Möglichkeit dargestellt, dieses umzusetzen.<br />

Dabei werden die Daten in einem Einheitswürfel [-1,1] und mit<br />

ZCOUNT Ebenen dargestellt.<br />

void GLFrame : : drawSlices NegativZ ( )<br />

{<br />

// Rahmenwerte f ü r d i e Ebenen im Einheitsw ü r f e l<br />

double dZPos = −1.0;<br />

double dZStep = 2 . 0 / f l o a t (ZCOUNT−1) ;<br />

f o r ( i n t s l i c e = 0 ; s l i c e < ZCOUNT; s l i c e ++){<br />

// P o s i t i o n e n der V e r t i c e s<br />

QVector3D v e r t i c e s [ 6 ] = {<br />

. . .<br />

} ;<br />

// Texturekoordinaten der V e r t i c e s<br />

QVector2D textCoord [ 6 ] = {<br />

. . .<br />

} ;<br />

}<br />

}<br />

// Zeichnet d i e V e r t i c e s mit den angegebenen<br />

Texturkoordinaten<br />

drawTexturedQuad ( v e r t i c e s , textCoord ,<br />

bindTexture ( textureStackZ [ s l i c e ] )<br />

) ;<br />

dZPos += dZStep ;<br />

Listing 4.1: Berechnung der Ebenenrichtung der negativen Z-Achse

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!