Flächen höherer Ordnung

Die wie im letzten Kapitel erzeugte Oberfläche ist sehr eckig. Ein einzelnes Partikel zum Beispiel wird als Oktaeder dargestellt, da nacheinander das Folgende erzeugt wird:
  1. eine Ecke
  2. acht Würfel
  3. sechs Oberflächenpunkte
  4. acht Dreiecke

Wünschenswert wäre aber eine Kugel, was in meiner Anwendung nicht ganz erreicht wird. Ich suchte also einen Algorithmus, der Dreiecke anhand der Normaleninformation verfeinert, dabei aber jede Kante unabhängig von der dritten Ecke des Dreiecks unterteilt. Dies ist notwendig, will man die Verfeinerung ohne Nachbarschaftsinformationen durchführen. Dabei stieß ich auf ATIs TRUFORM-Erweiterung, die laut [4] bereits 2001 mit der Radeon 2 Grafikkarte auf Hardware implementiert war. Diese Erweiterung erzeugt Dreiecksgitter einer fest vorgegebenen Verfeinerungsstufe mit Gitterpunkten, die auf dem bikubischen Bezier-Patch liegen, das durch das Dreieck und seine Normalen definiert ist. Die Kanten von Bezier-Patches sind die zu den jeweiligen Ecken und ihren Normalen gehörenden Splinekurven. Damit hängt auch eine regelmäßige Unterteilung dieser Kanten nicht von der dritten Ecke ab und die TRUFORM-Flächen auf gleicher Stufe unterteilter benachbarter Dreiecke fügen sich nahtlos aneinander.

Die Normalen der so erzeugten Dreiecke können wahlweise linear oder kubisch interpoliert sein. Warum lineare Interpolation nicht so gute Resultate liefert, soll Abb. 4.12 veranschaulichen. Andererseits benötigt die kubische Interpolation mehr Rechenzeit.

Abbildung 4.12: Linear vs. kubisch interpolierte Normalen bei ATIs TRUFORM-Erweiterung.
\includegraphics{pix/linkub.eps}
In meiner Implementierung schalte ich grundsätzlich die Verfeinerung auf die maximale Stufe (7), da die Erzeugung der Oberflächendreiecke ohnehin weit mehr Zeit in Anspruch nimmt als die Unterteilung aller Dreiecke in 64 Teildreiecke durch eine ATI Radeon 9600. So läuft meine Simulation in manchen Fällen (wenig Physik) mit 5.000 * 64 = 320.000 Dreiecken noch mit 30 Bildern pro Sekunde.

ATI TRUFORM $ ^\texttt{TM}$ zu verwenden, geht vorerst leider nur unter Windows. Dort erfordert es unter DIRECT X und unter Open GL lediglich das Einbinden der ATI-header und Einschalten der Erweiterung.



Unterabschnitte
Leo Wandersleb 2005-01-17