24     glBindBuffer(GL_ARRAY_BUFFER, 0);
 
   28     glBufferData(GL_ELEMENT_ARRAY_BUFFER, 
edgeList.size() * 
sizeof(
unsigned int), &
edgeList[0], GL_STATIC_DRAW);
 
   29     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
 
   31     glGenVertexArrays(1, &
vao);
 
   32     glBindVertexArray(
vao);
 
   35     glEnableVertexAttribArray(0);
 
   36     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
 
   41     glBindBuffer(GL_ARRAY_BUFFER, 0);
 
   42     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
 
   52     glDeleteVertexArrays(1, &
vao);
 
   62     for(
int i = 0; i<max; i++)
 
   64         glm::vec3 tmp = glm::vec3(0.0,0.0,0.0);
 
   73     for(
int i = 0; i<n; i++) 
 
   75         double x = start_x + i*(1.0/(n-1)); 
 
  141     glBindBuffer(GL_ARRAY_BUFFER, 0);
 
  144     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 
indexBuffer);
 
  145     glBufferData(GL_ELEMENT_ARRAY_BUFFER, 
edgeList.size()* 
sizeof(
unsigned int), &
edgeList[0], GL_STATIC_DRAW);
 
  146     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
 
  148     glGenVertexArrays(1, &
vao);
 
  149     glBindVertexArray(
vao);
 
  152     glEnableVertexAttribArray(0);
 
  153     glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
 
  155     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 
indexBuffer);
 
  157     glBindVertexArray(0);
 
  158     glBindBuffer(GL_ARRAY_BUFFER, 0);
 
  159     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
 
  186     int maxSegmentcount = 0;
 
  189         maxSegmentcount = (int)pow(4,(order))-1;
 
  193         maxSegmentcount = (int)pow(7,(order));
 
  197     int segment = (int)glm::floor(value * maxSegmentcount);
 
  200         return glm::vec3(value,value,0);
 
  202         double subvalue = value * maxSegmentcount - segment;    
 
  203         glm::vec3 pos_prime = 
mapping(subvalue, order-1);       
 
  205         if(segment == maxSegmentcount)
 
  207             return current[segment];
 
  213             tmp.x = pos_prime.x * current[segment + 1].x + (1-pos_prime.x) * current[segment].x;
 
  214             tmp.y = pos_prime.y * current[segment + 1].y + (1-pos_prime.y) * current[segment].y;
 
  223         float weight_x = subvalue;
 
  224         float weight_y = subvalue;
 
  226         tmp.x = weight_x * current[segment + 1].x + (1-weight_x) * current[segment].x;
 
  227         tmp.y = weight_y * current[segment + 1].y + (1-weight_y) * current[segment].y;
 
  241     auto baseColor_location = glGetUniformLocation(shader, 
"color");
 
  244         glUniform4f(baseColor_location, 0.5f, 0.0f, 0.0f, 0.3f);
 
  246         glUniform4f(baseColor_location, 0.5f, 0.0f, 0.0f, 0.1f);
 
  249     glBindVertexArray(
vao);
 
  251     glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
 
  252     glDrawElements(GL_LINES, 
edgeList.size(), GL_UNSIGNED_INT, 0);
 
  256         glUniform4f(baseColor_location, 0.0f, 0.0f, 0.5f, 1.0f);
 
  258         glDrawElements(GL_POINTS, 
edgeList.size(), GL_UNSIGNED_INT, 0);
 
  261     glBindVertexArray(0);
 
GLuint positionBuffer
Buffer fuer die Positionen der Knoten. 
std::vector< glm::vec3 > getPoints(int order)
Gibt die Kurveneckpunkte in der Iterationstiefe order zurueck. Sollte order groesser als die aktuell ...
void changeType(std::string type)
Aendert den Typ der Visualisierungskurve auf den uebergeben Typ ("hilbert" oder "gosper"). 
std::string getType()
Gibt den Typ der Kurve zurueck ("hilbert" oder "gosper"). 
void initPoints(myList *order, int n, int max)
initialisiert die Punkte fuer die Visualisierung mit der Iterationsstufe order, der Knotenanzahl n un...
int vertexCount
Anzahl der Knoten im Graph. 
int positioncount
Anzahl der Knotenpositionen. 
L_System * lindenmeyer
Das L-System zum errechnen der Kurvenpunkte. 
myList * graphOrder
Die Reihenfolge der Knoten nach der Tiefensuche im Clustering. 
void calcPoints(int iteration)
bool drawCurve
Speichert Benutzereingabe ob die Kurve mit gezeichnet werden soll. 
void draw(GLuint shader)
Zeichnet die aktuelle Kurve. 
std::vector< glm::vec3 > visupoints
Koordinatenliste der Knoten auf der Kurve. 
void setDrawingIteration(int order)
Setzt die zu zeichnende Iterationsstufe auf order falls order kleiner als die maximale Iterationsstuf...
bool drawPoints
Speichert Benutzereingabe ob die Knotenpunkte mit gezeichnet werden sollen. 
GLuint vao
Vertex Attribute Object zum Zeichnen der Visualisierung. 
void decreaseOrder()
Verringert die Kurvebordnung um 1. 
int visuorder
Iterationsstufe die gerade gezeichnet werden soll. 
glm::vec3 mapping(double value, int order)
Berechnet die Knotenpositionen entlang der Kurve. Value ist die Position des Knotens auf der Geraden ...
std::vector< glm::vec3 > points
Koordinatenliste der Knoten auf der Geraden. 
GLuint shader
Enthaellt den Zeichenshader. 
int maximum
Maximaler Index der Graphknoten. 
void increaseOrder()
Erhoeht die Kurvenordnung um 1. 
GLuint indexBuffer
Buffer fuer die Reihenfolge der Knoten. 
void draw(GLuint shader, bool drawPoints, bool drawCurve)
Zeichnet den Graphen mit den uebergeben Shader. Die 2 anderen Parameter bestimmen ob zusaetzlich die ...
std::vector< unsigned int > edgeList
Kantenliste aus dem Graphen. 
myList * next
Pointer zum naechsten Listenelement. 
Visualisation(int w, int h, myList *points, std::vector< unsigned int > eList, int n, int maxId)
den Konstruktor uebergeben wird: Laenge und Breite des Fensters, eine Liste mit den Geclusterten Grap...