Einleitung
Terrainvisualisierung ist die dreidimensionale Darstellung von digitalen Geländemodellen mit Hilfe von primitiven geometrischen Objekten, wie z.B. Linien, Dreiecken oder Quadraten. Die Anordnung und Form der geometrischen Objekte wird dabei durch das digitale Höhenmodell (auch Heightmap genannt) und die Farbe in Abhängigkeit von der relativen Höhe oder einer über das Gelände gelegten Textur bestimmt.
Bei der Visualisierung von digitalen Geländedaten müssen oft riesige Datenmengen verarbeitet werden. Da jedoch die meisten Einsatzgebiete Echtzeit-Rendering voraussetzen und die Rechnerressourcen begrenzt sind, werden spezielle "Level Of Detail (LOD) " Algorithmen benötigt, welche es trotz der großen Datenmengen erlauben, das Gelände in Echtzeit darzustellen.
Als LOD Algorithmen bezeichnet man in der Computergraphik Verfahren, welche den zum Zeichnen nötigen Rechenaufwand vermindern, indem sie qualitativ hochwertige durch qualitativ minderwertigere Objekte austauschen. Dieser Austauschprozess findet statt, wenn er vom menschlichen Auge kaum bis nicht mehr wahrnehmbar ist.
Ziele
Im Rahmen eines Anfänger Softwarepraktikums am Interdisziplinären Zentrum für wissenschaftliches Rechnen in Heidelberg war es meine Aufgabe mich über die verschiedenen digitalen Geländemodelle und Datenformate, in denen diese verfügbar sind, zu informieren und eine Beispielsanwendung zur Terrainvisualisierung zu programmieren. Meine Anwendung "TerrainViewer", sollte dabei folgende Funktionen aufweisen:
- Laden eines beliebigen digitalen Geländemodells im ARC/INFO ASCII Grid Format
- Darstellung des Geländes mit Hilfe der OpenGL Bibliothek
- Laden einer Textur im Bitmap Format
- Implementierung eines Algorithmus zur Steigerung der Performance mittels Reduzierung der geometrischen Objekte
- Einbau einer sinnvollen Kamerasteuerung
Fazit
Das Einlesen und Darstellen digitaler Geländemodelle ist mit den entsprechenden Kenntnissen in OpenGL oder anderen 3D API's relativ leicht zu bewerkstelligen. Die effiziente Darstellung dieser Daten ist jedoch alles andere als trivial. Neben guten Kenntnissen in der verwendeten Programmiersprache und der zugrunde liegenden Hardware ist auch algorithmische Denkfähigkeit nötig. Zusätzlich ist ein gutes Qualitäts-Leistungs-Verhältnis bei der Darstellung nötig.
Die von mir entwickelte TerrainViewer Applikation kann beliebige Daten im ARC/INFO ASCII Grid Format sowie eine Textur im Bitmap Format einlesen und darstellen. Einzige Beschränkung ist, dass das DGM und die Textur quadratisch vorliegen. Der eingebaute Algorithmus zur Reduzierung der Dreiecke steigert die Frames per Second (FPS) je nach Einstellung und Beschaffenheit des Geländes um bis zu 50% - 100%. Das qualitative Ergebnis ist aber leider relativ schlecht, da aufgrund der unterschiedlichen Detailstufen "Cracks" und "T-Junctions" zwischen den Dreiecken entstehen können. Prinzipiell ist die Anwendung jedoch zum effizienten Darstellen von Terraindaten bestehend aus bis zu 1 Mio. Gitterpunkten (abhängig von der Hardware) geeignet.
Ausblick
Die TerrainViewer Applikation kann an verschiedenen Stellen erweitert und natürlich auch verbessert werden:
- Das ARC/INFO ASCII Grid Format ist zwar sehr leicht einzulesen, aber auf wenigen Downloadportalen für digitale Geländemodelle verfügbar. Es wäre daher zu überlegen eine Funktion zum Einlesen von Daten im GEOTiff Format zu implementieren, da dieses Format weit verbreitet ist und auch in Bildverarbeitungsprogrammen künstlich erzeugt werden kann.
- Die Dreiecksreduzierung bei der Triangulierung könnte soweit optimiert werden, dass die Cracks und T-Junctions vermieden werden.
- Die Performance könnte weiter gesteigert werden durch:
- Bestimmung des maximalen Interpolationsfehler in Abhängig von der Betrachterposition.
- Implementierung von "View Frustum Culling" (Nur sichtbare Dreiecke innerhalb des Sichtkegels werden gezeichnet).
- Verwendung von Displaylists.