OpenGL mehrere Funktionen...



  • Hallo ihr alle.
    So, also ich habe ein Problem mit folgendem Code:

    #include <glut.h>
    
    void Quadrat()
    {
       // Hier würde ein einfaches Quadrat erstellt werden.
    }
    
    void Dreieck()
    {
       // Hier würde ein einfaches Dreieck erstellt werden.
    }
    
    void ZeigAlles()
    {
        Quadrat();
        Dreieck();
    
        glFlush()
    }
    
    int main(int iArgc, char** cppArgv) 
    {
    	glutInit(&iArgc, cppArgv);
    	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    	glutInitWindowSize(250, 250);
    	glutInitWindowPosition(200, 200);
    	glutCreateWindow("WasAuchImmer");
    	glClearColor(0.0, 0.0, 0.0, 0.0);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
    	glutDisplayFunc(ZeigAlles);
    	glutMainLoop();
             return 0;
    }
    

    Es kommt zwar keine Fehlermeldung, aber mein Problem ist, dass hier immer nur eins, also entweder das Quadrat oder das Dreieck gezeigt wird. Und zwar immer das, welches in der "ZeigAlles()" Funktion als letztes steht...

    Was mach ich falsch?
    Es muss doch einen Weg geben, zwei Zeichenfunktionen zu erstellen, oder?

    Bin für alle Antworten sehr dankbar...

    mfg



  • Naja, dann wäre wohl gerade das was du uns vorenthalten willst, nämlich der Inhalt der Funktionen Quadrat() und Dreieck(), interessant...



  • Ok, das stimmt natürlich 😉

    void Quadrat() 
    {
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0, 1.0, 0.0);
    glBegin(GL_QUADS);
    glVertex3f(0.1, 0.1, 0.0);
    glVertex3f(0.5, 0.1, 0.0);
    glVertex3f(0.5, 0.6, 0.0);
    glVertex3f(0.1, 0.6, 0.0);
    glEnd();
    }
    
    void Dreieck()
    {
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(0.0, 1.0, 0.0); 
    glBegin(GL_TRIANGLES);
    glVertex3f(0.1, 0.1, 0.0);
    glVertex3f(0.5, 0.1, 0.0);
    glVertex3f(0.5, 0.6, 0.0);
    glEnd();
    }
    


  • Also dass ist jetzt natürlich nur ein Beispiel, dass das Quadrat und das Dreieck eigentlich nebeneinander sein müssten ist mir klar, aber das ist nicht das Problem...



  • Das Problem ist, dass du in beiden Funktionen glClear(GL_COLOR_BUFFER_BIT) aufrufst.

    Wenn du das Quadrat gezeichnet hast und dann in die Funktion Dreieck aufrufst, wird eben wieder alles gelöscht 🙂



  • Jaa! Das ist es!! 😃

    Haha dass ich darauf nicht gekommen bin..

    Danke Danke Danke!!! 🙂



  • Ergänzend:
    Du solltest glClear nur 1x pro Frame aufrufen, ausser du hast irgendwelche Sonderfälle.


Anmelden zum Antworten