Volume Visulisation Application

Dieses Programm dient zur Visualisierung von Volumsdaten mittels Ray-Casting. Dargestellt werden Daten (die z.B. von einem Computertomographen erfasst wurden), die auf kartesischen dreidimensionalen Gittern gegeben sind und aus Dichtewerten bestehen.

Unser Ray-Casting-Algorithmus rendert diese Daten in folgender Weise: für jeden Pixel wird ein Strahl entlang der Blickrichtung durch die Bildebende geworfen.
Um nun festzustellen, wie dieser Strahl die Volumsdaten durchläuft, wird zunächst ein Würfel, der das Objekt der Daten umschließt und an dessen acht Ecken die Farbwerten der 3D-Positionen der Volumsdaten entsprechen, in FrameBufferObjects gerendert. Sowohl die Vorderseite des Würfels, als auch die Hinterseite, somit erhält mein zwei Texturen. Mit deren Hilfe (mit den entsprechenden RGB-Werten pro Pixel) kann man nun bestimmen, wo der Strahl ins Volumen eindringt bzw. wo er es wieder verlässt.
Man kann nun berechnen, wie der Strahl das Volumen durschschneidet. Entlang dieses Strahls werden dann (abhängig von der Schrittweite) diskrete Samplepositionen der Dichtewerte interpoliert.
Jedem Dichtewert wird auch mittels einer vom Benutzer definierten Transferfunktion ein Farb- und ein Transparenzwert zugeteilt, damit jedes Pixel auch ein repräsentativen Farbwert erhält. Zudem dient noch der Gradient der Dichtewerte um die Farbe zu schattieren.
Diese Farb- bzw. Transparenzwerte werden dann entsprechend einer Compositing Formel aufsummiert, um dann zum entsprechenden Farbwert jedes Pixels zu kommen.

Bei unserem Programm benutzen wir OpenGL zum Rendern. Die Volumsdaten und die dazugehörigen Gradientenwerte werden in 3D-Texturen gespeichert, damit werden die Samplepositionen automatisch interpoliert.
Den Ray-Casting-Algorithmus führt ein (GLSL) Fragment Shader aus. Ihm werden die Dichtewerte und auch die Gradientenwerte als 3D-Texturen, die zwei Texturen des gerenderten Würfels als 2D-Texturen, die Transferfunktion als 1D-Textur, und noch einige Parameter übergeben. In einer Schleife geht er die einzelnen Samplepositionen durch und mischt die Farben entsprechend der Compositing Formel schrittweise zusammen. Sobald der zusammengesetzte Transparenzwert einen definierten Schwellwert unterschreitet, bricht die Schleife ab, ansonsten geht sie solange, bis der Austrittspunkt aus dem Volumen erreicht wird. Schattiert werden die Farbwerte mittels Blinn-Phong Shading.

Neben der Darstellung mit Ray-Casting kann man bei unserem Programm auch noch die einzelnen Schichten der Volumsdaten in den drei Hauptrichtungen einfach durchschalten, dabei werden einfach 2D-Texturen aus einem Stapel aus Texturen bzw. eine Querschnitt der 3D-Textur dargestellt.

Entstanden ist dieses Programm als Übungsbeispiel zu der Lehrveranstalung LU Visualisierung.

Gerhard Bogner, Dietmar Moritz
05.12.2006