|
So, wieder ist recht viel Zeit vergangen seit dem letzten Eintrag in den Blog bzw. dem letzten Bericht über das XML3D.
Heute werde ich einen Zwischenbericht über den aktuellen Stand, Hindernisse und ähnliches geben. Ob es ein bisschen Anschauungsmaterial geben wird, werde ich mir im Laufe dieses Beitrags überlegen.
Ok, wodran bastel ich konkret? - Es gibt momentan 2 Projekte an denen ich Arbeite:
3D-WebGIS-Prototyp
Dies ist mein Hauptprojekt und damit auch meine Diplomarbeit
Ähnlich wie bei Google Maps oder OpenStreetMap teilt sich dieser Prototyp in mehrere Teile auf. Zum Einen ist dies ein Mapserver, der für das Erstellen der Geometrie aus GIS-Daten verantwortlich ist. Der Mapserver liefert als Ausgabe dann Kacheln mit einer oder mehreren Objektarten. Zum anderen ist für eine sinnvolle Betrachtung und Steuerung eine GUI notwendig. Diese soll auch über erste GIS-Funkionalitäten verfügen - abfragen von Objektdaten.
Der Mapserver ist momentan mein Hauptaugenmerk und auch der umfangreichste Teil der gesamten Arbeit. Für den 2D-Fall gibt es bereits mehrere verschiedene Mapserver, wobei der am weitesten verbreitete wohl der UMN MapServer sein wird. Dieser arbeitet OGC-konform, also nach Standards des Open Geospacial Consortium. Die OGC-Standards und damit auch der MapServer sind zur Zeit allerdings nur für die Verarbeitung von 2D-Geodaten und hauptsächlich für die Ausgabe als Bild ausgelegt. Eine Umarbeitung auf ein 2,5D oder 3D-Format ist extrem schwierig - auch durch die komplizierte Struktur des MapServers. Daher habe ich begonnen Eigenentwicklung eines XML3D-Mapservers zu schreiben. Wie der Name bereits sagt wird er vor allem für das XML3D-Format ausgelegt sein. Die Ausgabe von "gerenderten" 3D-Geodaten erwies sich in den letzten Wochen aber als schwieriger als ursprünglich erwartet. Um einen kurzen Vergleich zu bekommen, erläutere ich einmal kurz wie etwa ein 2D-Mapserver das macht: Der 2D-Mapserver arbeitet natürlich auch mit "normalen" Geodaten - also Punkten, Linien und Flächen (Vektordaten). Diese Vektordaten bzw. ausgewählte Teile davon werden in einen Arbeitsraum projiziert. Dieser Arbeitsraum entspricht einer Grafik von 256x256 Pixeln. Dort werden dann die Pfad-ähnlichen Vektoren ähnlich wie die Pfade in Photoshop mit unterschiedlichen Pinseln gerendert. Oft wird dies auch von speziellen Rendering-Clients übernommen.
In dem 3D-Fall geht dies leider nicht mehr so einfach. Es gibt einige Versuche (auch von OpenStreetMap: OSM-3D), die die 2D-Ausgabe nutzen und auf ein digitales Höhenmodell (DHM od. DGM od. DEM) mappen. Leider hat das zur Folge, dass Flüsse schon mal bergauf fließen oder Straßen an einem Steilen hang schräg verlaufen... Ich versuche mich mit meiner Diplomarbeit an einem anderen Ansatz um diese Erscheinungen zu verhindern. Jede Geometrie soll dort als richtige 3D-Geometrie und nicht nur als Textur verfügbar sein. Das was der Mapserver also machen soll ist aus den Geometrien, die als Punkte, Linien und Polygone in einer Datenbank abgespeichert sind, prozedural Geometrien generieren. Ein Straßenstück prozedural zu erzeugen ist noch einfach, mehrere Straßenstücke prozedural zu generieren ist unter bestimmten Bedingungen auch noch einfach. Aber wie ist dies beispielsweise mit Kreuzungen? Kreuzungen sind komplexe Gebilde, die aus einem Kreuzungsbereich bestehen, welcher je nach Straßenbreite, anliegender Bürgersteig, Schnittwinkel, usw. ganz unterschiedliche Ausmaße und Formen annehmen kann. Die Knotenpunkte dafür zu generieren ist eine Sache, diese vernünftig zu vernetzen und auch eine entsprechende Textur darauf zu legen ist eine andere.
Ähnlich, aber nicht so arg kompliziert ist die Generierung von Knotenpunkten von Straßen - dort muss möglicherweise Kurvenstücke erzeugt werden. Es muss beachtet werden, ob sich die Anzahl der Spuren oder die Fahrbahnbreite verändert hat und dazu dann eine entsprechende Geometrie mit Textur erzeugt werden. Da derzeit noch keine Höhenwerte direkt in den GIS-Daten vorhanden sind, soll ein DEM zur Hilfe genommen werden.
Abgesehen von Liniendaten muss noch ein Gelände aus Flächendaten unter Einbeziehung des DEMs erzeugt werden. Auch haben wieder die Vernetzung und die Texturierung den größten Schwierigkeitsgrad.
Ist dies geschafft sollte hoffentlich eine geschlossene Oberfläche ohne Z-fighting-Effekte existieren. Z-fighting tritt auf, wenn sich mehrere Fläche überlappen bzw. ineinander liegen. Aufgrund von numerischen Ungenauigkeiten (Rundungsfehler ^^) oder Einstränkungen durch den z-Buffer entsteht ein recht hässliches Flackern, bei dem gleichzeitig Teile der einen und Teile der anderen Fläche sichtbar sind. Selbst eine Erhöhung der Präzision wird dort nicht unbegrent Abhilfe schaffen können.
Linien und Flächen sind aber immer noch nicht alles - übrig bleiben Punktdaten, die zum Beispiel wie bei Bäumen oder Pollern durch instanziierte Objekte visualisiert werden können. Dies sollte keine große Schwierigkeit darstellen.
Das zweite Projekt werde ich nur kurz erwähnen: Es handelt ich dabei um ein Terminal, welches in einem Museum ausgestellt werden soll. Dort wird es eine recht große XML3D-Szene zu sehen geben, durch die man sich frei bewegen können soll. Es wird POIs (Points of Interest), eine Übersicht, geführte Touren und natürlich jede Menge Informationen geben. Das ganze wird dann per Touch-Display gesteuert und sowohl auf dem Touch-Display, als auch auf einer großen Leinwand in Stereo wiedergegeben (so zumindest der Plan). Man kann sich also davor stellen und sich die Szene in 3D ansehen.
An dieser Stelle mache ich nun ersteinmal wieder Schluss.
Coming Up: Eine hübsche Ausgabe vom Mapserver (hoffentlich ^^")
|