This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
representation_of_the_data_on_gpu [2017/12/03 08:43] 178.91.253.70 |
representation_of_the_data_on_gpu [2017/12/03 09:09] (current) 178.91.253.70 |
||
|---|---|---|---|
| Line 9: | Line 9: | ||
| mit einigen Optimierungen mehr als 20 FPS für den gleichen Datensatz zu erreichen. | mit einigen Optimierungen mehr als 20 FPS für den gleichen Datensatz zu erreichen. | ||
| - | --- | + | ---- |
| __**Vertex Buffer**__ | __**Vertex Buffer**__ | ||
| Line 21: | Line 21: | ||
| Fig: Layout einer Kurve als Triangle Strip im Vertex Buffer. | Fig: Layout einer Kurve als Triangle Strip im Vertex Buffer. | ||
| + | |||
| + | |||
| + | Damit ein Draw-Aufruf für alle Kurven genügt, werden die Kurven an den Enden mit degenerierten Dreiecken | ||
| + | verbunden, also mit Dreiecken, die eine Fläche = 0 haben und daher nicht angezeigt werden. Dafür bekommen die | ||
| + | ersten beiden Punkte P0 und P1 jeder Kurve die gleiche Koordinate zugewiesen, wie auch die letzten beiden Punkte Pn | ||
| + | und Pn−1 auf den gleiche Koordinate fallen (Für die Lesbarkeit nicht im Bild dargestellt). Als Triangle Strip entstehen | ||
| + | dann zwei unendlich dünne Dreicke zwischen Kurven die hintereinander im Vertex Buffer gespeichert sind. | ||
| + | |||
| + | Als Attribut bekommt jeder Vertex im Vertex Buffer einen Wert für side der entweder 1 oder -1 sein kann. | ||
| + | Außerdem hat jeder Vertex ein Attribut tex_pos eine Texturkoordinate für die Textur tex_1 Gegen¨uberliegende | ||
| + | Punkte einer Kurve haben den gleichen Wert für tex_pos und unterscheiden sich nur im Wert für side. | ||
| + | |||
| + | {{:wiki:tex.png?400|}} | ||
| + | |||
| + | Fig: Verbindungen zwischen den geladenen Texturen und dem Vertex Buffer. | ||
| + | |||
| + | |||
| + | ---- | ||
| + | |||
| + | __**tex_1**__ | ||
| + | |||
| + | |||
| + | Für jedes Jahr wird an den Namen tex_1 eine andere Textur gebunden. An der Texturkoordinate tex_pos ist die | ||
| + | Positionen des aktuellen Kurvenpunkte nach der Bezier Interpolation gespeichert sowie der Interpolationsparameter | ||
| + | t. t wird z.B. zur Farbinterpolation der Kurve verwendet (von Export t = 0 nach Import t = 1). Die Pixel einer | ||
| + | Kurve mit den Werten jedes Kurvenpunktes sind nebeneinander gruppiert. Am Anfang einer Solchen Gruppe liegt | ||
| + | ein weiterer Pixel, der Daten zur ganzen Kurve kodiert. Mit Hilfe von t kann die Position dieses Pixels berechnet | ||
| + | werden. Er enthält IDs für den Start- und Endknoten jeder Kurve, die als Koordinate für tex_selection genutzt | ||
| + | werden können und eine weitere Texturkoordinate tex_pos für den Zugriff auf tex_2 | ||
| + | |||
| + | |||
| + | __**tex_selection**__ | ||
| + | |||
| + | |||
| + | tex_selection speichert für jede Knoten-ID einen Wert von 0 für unausgewählt bis 1 für selektiert. | ||
| + | |||
| + | |||
| + | __**tex_2**__ | ||
| + | |||
| + | Unter tex_2 wird für jedes Jahr und jede ausgewählte Produktkategorie eine andere Textur geladen. Sie enthält | ||
| + | mit conn value die Breite einer Verbindung/Kurve (für den Einheitskreis skaliert) und mit conn_angle_dist den | ||
| + | Winkelabstand zwischen den Endpunkten einer Kurve. | ||
| + | |||
| + | ---- | ||
| + | ---- | ||
| + | |||
| + | |||
| + | __**Vertex Shader**__ | ||
| + | |||
| + | Der Vertex Shaderübernimmt die Textur-Lookups und bestimmt die Normale (normal an einem Kurvenpunkt, durch | ||
| + | Berechnung der Position der beiden Nachbarpunkte. Kurven werden entsprechend ihrer Breite skaliert, in dem | ||
| + | vert pos in Richtung der Normale verschoben wird: | ||
| + | |||
| + | pos = vert pos + normal * side * conn value * 0.5 | ||
| + | |||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | __**Datenformat**__ | ||
| + | |||
| + | Dieses Kapitel beschreibt das Dateiformat der Datensätze. Ein Datensatz beschreibt die Veränderung | ||
| + | eines Netzwerks über die Zeit. Die zusätzlichen hierarchischen Informationen, die in der Visualisierung als radialer Icicle Plot | ||
| + | dargestellt werden, bleiben konstant über die Zeit. Die Kanten und deren Gewichte (Handelsverbindungen) verändern | ||
| + | sich über die Zeit und mit der Verbindungsart (Produktklasse). Diese Informationen eines Datensatzes werden in drei | ||
| + | CSV-Dateien gespeichert. Die Dateinamen eines Datensatzes sollten den gleichen Präfix haben und sich nur in der | ||
| + | Dateiendung unterscheiden. Die erste Zeile ist jeweils f¨ur den Header reserviert, der beim Einlesen überprüft wird | ||
| + | um eine Verwechslung zu verhindern. | ||
| + | |||
| + | * **Verbindungsarten** | ||
| + | |||
| + | Die möglichen Verbindungsarten werden in einer Datei mit der Endung *.cid.csv gespeichert. | ||
| + | |||
| + | <code c> | ||
| + | connection_type_id, short_name , long_name | ||
| + | 0 ,TOTAL, Total | ||
| + | 1 , Apples , Apples | ||
| + | 2 , Oranges , Oranges | ||
| + | </code> | ||
| + | |||
| + | Listing: Beispiel simple.cid.csv | ||
| + | |||
| + | |||
| + | - connection type id: Index der Verbindungsart | ||
| + | - short name: Eine kurze Bezeichnung | ||
| + | - long name: Eine möglicherweise längere Bezeichnung | ||
| + | |||
| + | **Wichtig:** Die erste Verbindungsart mit der ID 0 ist für TOTAL reserviert. Eine Verbindung vom Typ TOTAL | ||
| + | enthält üblicherweise die Summe aller anderen Verbindungsarten für den gleichen Zeitwert. | ||
| + | |||
| + | |||
| + | * **Hierarchie** | ||
| + | |||
| + | |||
| + | Die hierarchischen Informationen bilden einen Baum und werden in einer Datei mit der Endung *.tree.csv | ||
| + | gespeichert. | ||
| + | |||
| + | <code c> | ||
| + | node_id , parentid , short_name , long_name | ||
| + | 1 ,0 , Root , Root Node | ||
| + | 2 ,1 ,EU, ” European Union ” | ||
| + | 3 ,1 ,NA, ” North America ” | ||
| + | 4 ,2 ,DEU, ” Germany” | ||
| + | 5 ,2 , ESP , ” Spain ” | ||
| + | 6 ,3 ,CAN, ” Canada ” | ||
| + | 7 ,3 ,USA, ” United States” | ||
| + | </code> | ||
| + | |||
| + | - node_id: Index des Knotens | ||
| + | - parent_id: Index der Elternknotens | ||
| + | - short_name: Eine kurze Bezeichnung, die z.B. im Icicle Plot verwendet wird | ||
| + | - long_name: Eine möglicherweise längere Bezeichnung, die z.B. in den Tooltips verwendet wird | ||
| + | |||
| + | **Wichtig:** Der erste Knoten mit der ID 1 ist für den Wurzelknoten reserviert. Da dieser keinen Elternknoten hat, ist parent id = 0. Alle Blätter des Baums sollten auf einer Ebene liegen. | ||
| + | |||
| + | |||
| + | |||
| + | * **Verbindungen** | ||
| + | |||
| + | |||
| + | Die hierarchischen Informationen werden in einer Datei mit der Endung *.conn.csv gespeichert. | ||
| + | |||
| + | <code c> | ||
| + | from_node_id , to_node_id , connection_type_id , value , time | ||
| + | 4 ,5 ,0 ,45.4 ,2016 | ||
| + | 4 ,5 ,1 ,12.1 ,2016 | ||
| + | 4 ,5 ,0 ,43.0 ,2015 | ||
| + | 4 ,5 , 1 ,9.8 ,20 15 | ||
| + | 4 ,6 ,0 ,27.4 ,2016 | ||
| + | 4 ,6 , 1 ,2.2 ,20 16 | ||
| + | . . . | ||
| + | </code> | ||
| + | |||
| + | - from node id: Index des Startknotens | ||
| + | - to node id: Index des Zielknotens | ||
| + | - connection type id: Index der Verbindungsart | ||
| + | - value: Das Gewicht (Handelsvolumen) | ||
| + | - time: Ein Zeitwert (meist eine Jahreszahl) | ||
| + | |||
| + | In einer *.conn.csv Datei wird jede Handelsverbindung von jeden Zeitwert (Jahr) und jeder Verbindungsart | ||
| + | gespeichert. Verbindungen sollten nur zwischen Blättern des Baum definiert werden. | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||