ich versuche ein Programm zu schreiben, dass einen Pythagoras-Baum mithilfe von OpenGL in Qt durch Rekursion rendert. Mein Problem ist, dass sich das Programm beim Start aufhängt, was nur durch die Rekursion geschieht.
Folgende Funktion, die durch paintGL() in der selben Klasse aufgerufen wird, soll den Baum durch Rekursion zeichnen:
Code: Alles auswählen
void TreeGL::draw(double ax, double ay, double bx, double by, double cx, double cy, double dx, double dy) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
if (iteration > 0) {
iteration--;
glBegin( GL_LINES);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(ax, ay, -5.0);
glVertex3f(bx, by, -5.0);
glVertex3f(cx, cy, -5.0);
glVertex3f(dx, dy, -5.0);
glVertex3f(ax, ay, -5.0);
glVertex3f(dx, dy, -5.0);
glVertex3f(bx, by, -5.0);
glVertex3f(cx, cy, -5.0);
glEnd();
r1 = 0.2 + 0.4*0.6;
r2 = sqrt(0.5*0.5-(0.5-r1)*(0.5-r1));
ex = -0.5 + r1*(0.5+0.5) + r2*(-0.5+0.5);
ey = 0.5 + r1*(0.5-0.5) + r2*(0.5+0.5);
a1x = dx;
a1y = dy;
b1x = ex;
b1y = ey;
c1x = b1x+a1y-b1y;
c1y = b1y+b1x-a1x;
d1x = a1x+a1y-b1y;
d1y = a1y+b1x-a1x;
// neues Kathetenquadrat links
draw(a1x, a1y, b1x, b1y, c1x, c1y, d1x, d1y);
a2x = ex;
a2y = ey;
b2x = cx;
b2y = cy;
c2x = b2x+a2y-b2y;
c2y = b2y+b2x-a2x;
d2x = a2x+a2y-b2y;
d2y = a2y+b2x-a2x;
// neues Kathetenquadrat rechts
draw(a2x, a2y, b2x, b2y, c2x, c2y, d2x, d2y);
}
}
Code: Alles auswählen
glShadeModel(GL_SMOOTH);
glClearColor(1.0f, 1.0f, 1.0f, 0.5f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST );
glDepthFunc(GL_LEQUAL);
glEnable(GL_CULL_FACE);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
Wäre gut wenn mir jemand weiterhelfen könnte, da ich ein ziemlicher Neuling in Sachen Qt/OpenGL bin. Vielen Dank im Voraus.