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...