background image
7 Diskussion und Verbesserungsvorschläge
Obwohl die Ergebnisse auf den ersten Blick gut aussehen, gibt es doch noch einige
Verbesserungsmöglichkeiten. Zunächst wird bei Abruf eines Werts zwischen den Gitterpunkten des
Höhenfelds nur der nächste Nachbar genommen. Die Implementierung einer linearen Interpolation
wäre wünschenswert und sollte insgesamt glattere Verläufe des Terrains wiedergeben.
Zudem könnte man für jeden Gitterpunkt des Höhenfelds ein Fehler über die Hausdorff-Distanz
zum jeweiligen Dreieck berechnen, das eine Region umschließt. Dadurch würde sich die
Genauigkeit sehr stark erhöhen, aber dementsprechend auch der Speicherbedarf und
Rechenaufwand.
Bereits angefangen zu implementieren wurde eine nachträgliche Glättungsfunktion, die zum Ziel
hat, Treppenstufen bei zu großen Höhenunterschieden zwischen den zu entfernen und das Mesh
insgesamt zu glätten. Zum aktuellen Zeitpunkt ist diese Funktion aber noch nicht korrekt lauffähig.
Insgesamt lässt sich an der Verarbeitungsgeschwindigkeit noch viel verbessern. Die Dreiecke sind
in einem Array angeordnet, von denen nach der Vermaschung schließlich kaum noch welche
benutzt werden. Für jedes Dreieck werden zwar jeweils der Vorgänger (Parent) und beide
Nachfolger (Childs) gespeichert, aber diese Baumstruktur wird noch nicht effektiv zur Vermeidung
der Cracks genutzt. Ein sogenanntes ,,Tree-Pruning"-Verfahren (siehe [MESH_OPT]) könnte das
Abhängigkeitsproblem effizienter lösen.
Wie schon in der Einführung angesprochen, wurde die automatische Texturierung von 4-8 Meshs
noch nicht implementiert, da sich die Texturkoordinaten nicht so einfach bestimmen lassen, wie für
ein reguläres Mesh. Würde man das Mesh in Form einer Quadric speichern und als ganzes
texturieren, würde sich dieser Schritt aber automatisieren lassen.
Ein weiterer interessanter Punkt ist die Suche nach einem optimalen Triangle Strip, durch den das
komplette Mesh beschrieben werden kann. In einem Triangle Strip wird nur ein Anfangsdreieck
gespeichert, für alle folgenden Dreiecke werden jeweils die letzten beiden Vertices des Vorgänger-
Dreiecks benutzt und nur jeweils ein neuer Vertex gespeichert. Aufeinander folgende Dreiecke
besitzen hier immer eine gemeinsame Kante. Insgesamt würde das den Speicherbedarf um zwei fast
Drittel reduzieren und die auch Darstellungsgeschwindigkeit großer Modelle beschleunigen.
Ein alternatives Verfahren wäre die Nutzung von Triangle Fans. Hier wird für alle Dreiecke, die
mindestens einen gemeinsamen Punkt besitzen, dieser jeweils nur einmal gespeichert. Die anderen
beiden Vertices müssen für jedes Dreieck definiert sein, wobei auch hier nacheinander erstellte
Dreiecke immer zwei gemeinsame Vertices und eine gemeinsame Kante besitzen. Man kann durch
dieses Verfahren den Speicherverbrauch senken und die Geschwindigkeit der Darstellung fast
genauso stark beschleunigen, wie mit Triangle Strips, weil in einem 4-8 Mesh ein Vertex von bis zu
acht Dreiecken gemeinsam benutzt wird.
Für die Zukunft wäre eine Implementierung des Algorithmus in der Sprache C for Graphics (Cg)
vorstellbar (siehe auch: [GPU_TER]). Über diese Programmiersprache erhält man sehr leicht
Zugriff auf die Vertex- und Pixelshader-Einheiten einer modernen Grafikkarte. Der Hauptvorteil der
Nutzung dieser Einheiten ist, dass diese viele Berechnungen parallel ausführen können (bei
aktuellen Nvidia Geforce 9 Modellen bis zu 256 Berechnungen pro Taktzyklus [NVIDIA]), was das
Verfahren insgesamt enorm beschleunigen würde.
33