Dieses Progamm wurde in C++, Cuda, Open GL und GLSL implementiert. Die GUI wurde mithilfe von QT implementiert.
Das Programm wurde in verschiedene Bereiche untergliedert. Nämlich:
Die GUI wurde mithilfe von QT und den QT Designer erstellt. Dadurch werden in MainWindow nur noch Slots zum laden der QUI Werte benötigt, welche weiters mit einer einfachen statischen Klasse (Renderstates) an den Renderer weitergegeben werden.
Die Particle werden mithilfe von CUDA berechnet, aber anschließend mittels OpenGL gerendert. Der Vorteil dieser Methode ist, dass die jeweiligen Vorteile beider Systeme optimal berechnet werden. Die Regeln sind großteils 1zu1 umgesetzt worden (bei Fluid und Partikel). Spannend ist die Grid Methode, welche zur Berechnung der nächsten Nachbarn benützt wird. Dazu wird ein Grid eingeführt (uniform verteilt), welches jedes ein Index hat. Desweiteren hat auch jedes Partikel ein Index. Anschließend speichert jedes Partikel den Index in das zugehörige Grid Index. Anschließend wird nach dem Gridindex sortiert. Die Partikeln werden anhand diesen Indexes sortiert und es kann dazu noch der Grid Start und Endindex berechnet werden.
Die Darstellung wird im Rendering Teil erstellt. Es wurden verschiedene Renderingpasses erstellt, nämlich für
Spannend ist auch, dass einige Möglichkeiten zum Rendering existieren
Das Raycasting wurde mittels Volume Bricking optimiert um teure Rechenzeit zu sparen.
Desweiteren wurde auch 2 Clustering Algorithmen implementiert. Nämlich: EM Algorithmus of Multple Gaussians, sowie kMeans Algorithmus. Diese werden im Gegensatz zur restlichen Funktionen, welche parallel auf der GPU berechnet wurden, parallel auf der CPU berechnet. Es werden auch 2D Transferfunktionen unterstützt.
Technologien: