Rekursion in Qt/OpenGL

Alles rund um die Programmierung mit Qt
Antworten
nikdohm
Beiträge: 1
Registriert: 4. April 2012 21:02

Rekursion in Qt/OpenGL

Beitrag von nikdohm » 4. April 2012 22:07

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.

solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: Rekursion in Qt/OpenGL

Beitrag von solarix » 13. April 2012 10:28

Macht dieser Pseudocode aus deiner Sicht Sinn?

Code: Alles auswählen

function zeichne(..)
  loescheAllesBisherigGezeichnete()
  zeichneLinien...
  Falls Rekursion:
     zeichne(...)
Aber sonst funktioniert das bei mir...
Dateianhänge
image.png
image.png (2.22 KiB) 1933 mal betrachtet

Antworten