Beispiel 1 aus LU Visualisierung WS 2006/2007
Download des Programms:VisLU-Release 0.56.zip (127kB) 
Link zu Beispielbildern 
Aufgabenstellung
Es soll ein Programm entwickelt werden, welche Volumsdaten mittels Raycasting darstellt. Als Grundlage
für das Programm soll das Paper von  Marc Levoy: "Display of Surfaces from Volume Data" verwendet werden. Da Volumsdaten hier als Dichtewerte repräsentiert sind, wird eine Transferfunktion benötigt. Diese soll auch die rämliche Veränderung der Dichte (Gradient) berücksichtigen. 
Die Lösung soll Volumsdaten mittels Raycasting darstellen können, als auch eine einstellbare Transferfunktion zur Verfügung stellen. 
Lösung
Das Programm wurde in C# unter Microsoft Visual Studio .Net 2005 mit der Microsoft DirectX 9.0c SDK (Oktober 2006) entwickelt. Zur Ausführung muss mindestens die Redistributable DirectX 9.0c (Oktober 2006), als auch die .NET Runtime 2.0, installiert sein. 
Das Programm stellt mehrere Darstellungsmöglichkeiten für Volumsdaten zur Verfügung: 
- Darstellung der Schichten in den 3 Hauptrichtungen
 
	- Pre-Shaded Slices (ab PixelShader 1.1)
 
	- Post-Shaded Slices (ab PixelShader 2.0)
 
	- Raycasting mit diffuser Beleuchtung (ab Pixelshader 3.0)
 
 
Die Resultate der einzelnen Techniken unterscheiden sich. Nachfolgend ein Vergleich der Techniken und einer kurzen Beschreibung, wie diese umgesetzt worden sind. (ausgenommen der Darstellung in den 3 Hauptrichtungen): 
	
		  
			Pre-Shaded Slices
			Die Volumstextur wird vor dem Mappen auf die Proxygeometrie in RGBA-Daten mittels Transferfunktion transferiert. Diese
			Technik benötigt die wenigsten Texture-Lookups der hier vorgestellten Techniken. Jedoch benötigt eine Änderung
			der Transferfunktion einig Zeit, da dabei die gesamte Volumstextur neu geschrieben werden muss. 
		 | 
	 
	
		  
			Post-Shaded Slices
			Die Volumstexture besteht hier aus den Dichtewerten der Volumsdaten. Desweiteren gibt es eine eigene Texture, welche die
			Transferfunktion darstellt. Es wird für jeden Pixel auf der Proxygeometrie die dazugehörige Farbe aus der 
			Transfertextur ermittelt. Desweiteren ist in den Kanälen RGB der Volumstextur der Gradient jedes einzelnen Dichtewerts 
			enthalten. Die Qualität dieser Darstellung ist besser, als die des Pre-Shading. Jedoch kommt dies mit dem Nachteil 
			zusätzliche Textur-Lookups durchführen zu müssen.
		  | 
	 
	
		  
			RayCasting
			Hier kommen mehrere Renderschritte zum Einsatz: 
		
				Pass 1: Rendern der Frontfaces einer BoundingBox in eine Textur,
				welche an ihren Ecken farbcodiert die 3D-Texturkoordinaten beinhaltet. 
				Pass 2: Rendern der Backfaces der selben BoundingBox in eine Textur 
				Pass 3: Subtraktion der beiden Texturen. Das Ergebnis ist ein Vektor, welcher
				vom Eintrittspunkt auf den Austrittspunkt des "Blickstrahls" zeigt. Nun wird mit
				dieser Information im PixelShader in bestimmten Abständen die Dichte mit
				den dazugehörigen Farbwerten bestimmt. Diese Farbwerte (RGBA) werden kontinuierlich
				aufaddiert und die Schleife bricht ab, wenn alpha den Wert 1.0f bzw. 255 übersteigt. 
				
  Diese Technik ist mit Abstand die leistungsintensivste, da pro Pixel viele TexturLookups 
			durchgeführt werden müssen. 	
			
		  | 
	 
 
Das Programm
 
Das Programm bietet eine Hilfefunktion (Taste F1), welche zu den einzelnen Modi Hinweise einblendet. Die Navigation durch das Programm
erfolgt auf der linken Seite. Mittels des Datei-Laden-Dialogs können Volumsdaten geladen werden. In allen 3D-Modi kann
das Volumsobjekt mittels rechter Maustaste und Mausbewegung rotiert werden.
		  |