Seite 1 von 1

Rekursion in Qt/OpenGL

Verfasst: 4. April 2012 22:07
von nikdohm
Hallo liebe Community,

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);
    }
} 

Und dies ist die Initialisierung von OpenGL:

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.

Re: Rekursion in Qt/OpenGL

Verfasst: 13. April 2012 10:28
von solarix
Macht dieser Pseudocode aus deiner Sicht Sinn?

Code: Alles auswählen

function zeichne(..)
  loescheAllesBisherigGezeichnete()
  zeichneLinien...
  Falls Rekursion:
     zeichne(...)
Aber sonst funktioniert das bei mir...