OpenGL: Koordinatensystem, Tiefentest



  • Hallo zusammen,

    ich bin mir eigentlich ziemlich sicher, dass der Betrachter in OpenGL in Richtung der negativen z-Achse schaut. Allerdings wollte ich das mal testen, indem ich 3 Quads mit unterschiedlichen z-Werten zeichne (Tiefentest ist aktiviert):

    void square(float x, float y, float z, float width, float height) {...}
    
    void display(void)
    {
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    	glColor3f(1.0, 0.0, 0.0);
    	square(0, 0, 0, 1, 1);
    	glColor3f(0.0, 1.0, 0.0);
    	square(-0.25, 0.0, -1, 1, 1);
    	glColor3f(0.0, 0.0, 1.0);
    	square(0.0, -0.5, -0.5, 1, 1);
    	glutSwapBuffers();
    }
    

    Die Reihenfolge vom Betrachterstandpunkt: Grün, Blau, Rot
    Erwartet hätte ich aber: Rot (0), Blau (-0.5), Grün (-1.0)

    Kann mir jemand sagen, wo mein Denkfehler ist?

    Gruß,
    mtx



  • Hallo mtx,

    der default-Wert von glDepthFunc ist GL_LESS, daher kommt jedes Fragment durch den Tiefentest, dessen z-Werte geringer sind, als der im Tiefenpuffer gespeicherte Wert. D.h. je kleiner der Wert, deso näher ist ein Objekt am Viewport.

    Mit freundlichen Grüßen,
    MaBa



  • Danke MaBa,

    stimmt, wenn ich den Parameter von glDepthFunc ändere bekomme ich tatsächlich eine andere Reihenfolge. Allerdings ist mir unklar, warum man sagt, dass OpenGL ein rechtshändiges Koordinatensystem hat.

    Gruß,
    mtx


Anmelden zum Antworten