User Tools

Site Tools


representation_of_the_data_on_gpu

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
representation_of_the_data_on_gpu [2017/12/03 08:41]
178.91.253.70 created
representation_of_the_data_on_gpu [2017/12/03 09:09] (current)
178.91.253.70
Line 1: Line 1:
  
 **Repräsentation der Daten auf der GPU** **Repräsentation der Daten auf der GPU**
 +
 +Einleitender Hinweis: Die GUI verwendet QML für die grafischen Benutzerelemente (Slider, Buttons, usw.). Die eigentliche Visualisierung
 +wird mit zwei Technologien realisiert. Für den radialen Icicle Plot (Darstellung des Baumes mit Ringsegmenten) wird
 +die QPainter API von Qt benutzt, da insbesondere die Darstellung von Text mit OpenGL nicht trivial ist. Für die
 +Darstellung der Kurven (Größenordnung 10.000 Kurven pro Frame) ist QPainter nicht performant genug (ca. 5 sek
 +pro Frame, also 0.2 FPS) für eine interaktive Visualisierung (> 10 FPS). Hierfür verwenden wir OpenGL ES 2.0, um
 +mit einigen Optimierungen mehr als 20 FPS für den gleichen Datensatz zu erreichen.
 +
 +----
 +
 +__**Vertex Buffer**__
 +
 +
 +Die Festlegung auf OpenGL ES 2.0 verhindert die Benutzung von Geometry Shadern, daher wird bei Programmstart
 +ein großer Triangle Strip erzeugt, der die Vertices für die höchst mögliche Anzahl an Kurven für einen Datensatz
 +bereit hält und im Vertex Buffer abgelegt wird.
 +
 +{{:​wiki:​tristrip.png?​400|}}
 +
 +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.
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
 +
  
  
representation_of_the_data_on_gpu.1512286868.txt.gz · Last modified: 2017/12/03 08:41 by 178.91.253.70