Volumsvisualisierung

by Barbara Fritsch und Martin Reiterer

Technische Details

Nun kurz zu den technischen Details unseren Anwendung, um Ihnen einen groben Überblick über unseren Lösungsansatz zu verschaffen. Grundsätzlich sollte erwähnt werden, dass wir als Grundgerüst das von der Übungsleitung zur Verfügung gestellte Basisframework verwenden. Dies erschien uns als sehr hilfreich, da die wichtigsten Hilfsklassen bzw. die OpenGL-Rendering-Pipeline bereits implementiert waren.

Benutzeroberfläche

Für das window-management haben wir uns entschieden, GLUT anstelle des im Framework herangezogenen OPENGLUT zu verwenden. Dies brachte uns den Vorteil, dass wir nun GLUI für das user-interface-management einsetzen konnten.

ray casting

So einfach das Grundprinzip des ray casting auf den ersten Blick erscheint, bedarf es in der prozeduralen Umsetzung doch einiges an konzeptionell kniffeligen Entscheidungen. So haben wir für dessen Umsetzung auf folgende Vorgehensweise geeinigt:

  1. Datensatz in interne Datenstruktur einlesen
  2. Normalisierte Gradienten aus dem, in der internen Datenstruktur, Datensatz ermitteln
  3. Histogrammdaten vorberechnen
  4. Transferfunktion mit standardwerten aus INI-Datei füttern
  5. Würfel mit entsprechenden Texturkoordinaten als Bounding-Box für den 3D-Datensatz an die Open-GL Rendering-Pipeline übergeben
  6. 3D-Textur für Datensatz (mit den Dichtewerten) erstellen und an Texturebene binden
  7. 3D-Textur für Gradientenfeld erstellen und an Texturebene binden
  8. 1D RGBA Transfertextur aus Transferfunktion ermitteln und an Texturebene binden. Dabei beinhalten die RGB-Werte die Farbkodierung und A die zum Dichtewert korrespondierende opacity
  9. Front- und Backfaces mittels FBOs in eigene Texturen rendern und ebenfalls an Texturebenen binden.
  10. Texturen an Shader übergeben
  11. Ray casting im fragment shader