----==== Projekt "funsui" ====----

Demo fr VU Echtzeitgraphik WS 06/07
Institut fr Computergraphik und Algorithmen
TU Wien

Markus Glatz, 		0225274, 532
Lorand Tompa-Antal	0226091, 532




------ Systemvoraussetzungen -----

3.0+ GHz CPU

getestet auf 
NVidia GeForceFX und ATI x1850pro Graphikkarten




-------- Effekte & Quellen--------

>>> Partikelsystem <<<

Die Wasserfontnen des Springbrunnens in Szene 1 sind einzelne Partikelsysteme.
Die Partikel sind einfache texturierte Quads die immer in Blickrichtung der Kamera ausgerichtet sind.

Quelle: http://tfc.duke.free.fr/



>>> Stencil Mirror (Wasseroberflche der Brunnenbecken) <<<

In den beiden Becken des Springbrunnens in Szene 1 spiegelt sich die Szene, realisiert mit einem Stencil Mirror.

Algorithmus fr einen der Spiegel:
- Der Brunnen wird normal in den Framebuffer + Z-Buffer gerendert.
- Die Wasseroberflche wird nur in den Stencilbuffer gerendert.
- Der Z-Buffer wird gelscht damit die reflektierte Szene auch unter dem Becken/Brunnen gezeichnet werden kann. Der Depthtest muss hierbei aktiviert bleiben damit die Reflektion korrekt gezeichnet werden kann. Die Reflektion wird mit Stenciltest in den Framebuffer + Z-Buffer gerendert.
- Der Z-Buffer der Reflektion wird gelscht und der Z-Buffer des eigentlichen Brunnens wiederhergestellt (durch normales Rendern des Brunnens mit deaktivierter Colormask). Das Zwischenspeichern und Auslesen des Z-Buffers wre aufwndiger gewesen als einfach den Brunnen noch einmal zu rendern.
	
	

>>> Motion Blur <<<

Der Motion Blur Effekt wird einfach mit dem Accumulation Buffer realisiert.



>>> Shadow Volumes <<<

Szene 2 zeigt einen Fels mit einem Farn der von einer sich bewegenden Lichtquelle beleuchtet wird und auf die Szene und sich selbst Schatten wirft.

Die Shadow Volumes werden von der Funktion drawShadowVolumes3DS(...) berechnet und gezeichnet.
Der Zfail Algorithmus und das Fllen des Stencil Buffers werden in drawScene() durchgefhrt.
Als Occluder kann ein beliebiges 3DS Modell verwendet werden das vom 3DS Model Loader geladen wurde.

Wir haben uns fr die triviale Methode entschieden und berechnen fr jedes einzelne Face des Modells ein eigenes Shadow Volume. Die Extrusion der Vertices erfolgt ebenfalls auf der CPU (darum drckt dieser Effekt etwas auf die Performance).

Im Prinzip wrde es reichen nur fr jene Faces ein Shadow Volume zu berechnen die von der Lichtquelle wegschauen. Das von uns verwendete Modell ist aber nicht abgeschlossen (wasserdicht), die Bltter des Farns sind nur einseitig. Darum ist es notwendig Shadow Volumes fr alle Faces zu berechnen.

Die Volumes werden fr den von uns verwendeten Zfail Algorithmus mit Dark und Light Cap erzeugt. Die Lnge der Shadow Volumes ist relativ kurz gewhlt, lang genug um alle Stellen der Szene zu erreichen, aber zu kurz um die Far Clip Plane zu erreichen (eine der Problemquellen von Zfail).

Quellen: 
http://www.ultimategameprogramming.com/
	Als Anhaltspunkt diente das Shadow Volumes Tutorial (OpenGL - Page 4).
http://www.3ddrome.com/articles/shadowvolumes.php
	Zustzliche Theorie



>>> Environment Mapping (Cubemaps) <<<

Die dritte Szene enthlt 2 Objekte mit dynamisch erzeugten Environment Maps (Cubemaps). 
Die Funktion updateCubemapTextures() rendert fr jedes Frame die 6 Seiten der Cubemaps beider Objekte. Der Framebuffer wird mit glCopyTexSubImage2D(...) ausgelesen und in die entsprechende Textur geschrieben.
Die Cubemap wird mittels GL_TEXTURE_CUBE_MAP_ARB auf die Objekte aufgetragen.

Quelle: http://web.missouri.edu/~irsa39/opengl/










PS: "funsui" bedeutet "Springbrunnen" auf Japanisch, daher der Titel. ;)