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.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