background image
Nach der Bestimmung des Mittelpunkts der Hypotenuse wird das Ursprungs-Dreieck geteilt, d.h. an
Stelle des alten Dreiecks werden zwei neue Dreiecke ausgegeben.
Die Funktion zur Unterteilung
subdivide(triangle3, triangle3, char, unsigned int level, unsigned int maxlevel)
bearbeitet je zwei Dreiecke in einem Schritt, woraus folgt, dass die Funktion für jeweils zwei
Eingabe-Dreiecke vier neue Dreiecke ausgibt.
Ein sogenanntes draw-Flag kennzeichnet für jedes Dreieck, ob es zum endgültigen Mesh gehört und
ob es somit auf dem Bildschirm gezeichnet und später auch abgespeichert werden soll. In jedem
Unterteilungsschritt wird deshalb das draw-Flag der beiden Eingabe-Dreiecke auf false gesetzt und
der vier neuen Ausgabe-Dreiecke auf true. Der Vorteil dieser Methode ist, dass auch im Nachhinein
auf Dreiecke zugegriffen werden kann, die nicht auf dem Bildschirm gezeichnet werden. Dies ist
für die Vermeidung von Cracks und T-Junctions (siehe Abschnitt 4.3) von Bedeutung. Zu jedem
Dreieck wird zudem aufsteigend die Rekursionsstufe gespeichert, beginnend bei Stufe 0 für die
beiden initialen Dreiecke. Zur Veranschaulichlichung des ganzen Prozesses, siehe Abb. 29-31 im
Anhang (Seite 39).
Die subdivide(...)-Funktion ist eine rekursive Funktion, d.h. sie ruft sich in jedem
Verfeinerungsschritt so lange wieder selbst auf, bis ein zuvor festgelegter Verfeinerungsgrad
erreicht ist. Diesen gewünschten Verfeinerungsgrad (Anzahl der Rekursionsschritte) kann man der
Funktion über das Argument maxlevel übergeben. Bei der adaptiven Verfeinerung ermittelt die
Hilfsfunktion calc_error(...) anhand eines übergebenen Schwellwerts automatisch, ob in einem
bestimmten Bereich eine weitere Verfeinerung notwendig ist, wie es im folgenden Abschnitt
geschildert wird.
18
Abbildung 14: Bestimmung des Mittelpunkts der Hypotenuse für die Ausrichtungen
0 und 4. Die rot gestrichelte Linie deutet an, an welcher Stelle nach der
Unterteilung eine neue Kante entsteht. Die blauen Ziffern geben die Reihenfolge
der Vertices der neu entstandenen Dreiecke an.