Mein Verständnis von OpenGL-Rendering war, dass ohne einen Tiefentest, Objekte würden in sequenzieller Reihenfolge gezeichnet werden, so dass die letzte Render-Funktion, die Sie aufrufen wird seine Form über alles, was bereits gezeichnet wurde zeichnen. Ich finde, dass dies scheint jedoch nicht der Fall zu sein:OpenGL zurück nach vorne Rendering
glDisable(GL_DEPTH_TEST);
glDisable(GL_ALPHA_TEST);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_QUADS);
{
glVertex2f(50, 50);
glVertex2f(100, 50);
glVertex2f(100, 100);
glVertex2f(50, 100);
}
glEnd();
glColor3f(0.0, 0.0, 1.0);
glBegin(GL_QUADS);
{
glVertex2f(30, 60);
glVertex2f(110, 60);
glVertex2f(110, 90);
glVertex2f(30, 90);
}
glEnd();
Eher dann das rote Quadrat unter dem blauen Quadrat, die ich erwarten würde, diese Anrufe geben Sie mir ein rotes Quadrat über ein blaues Quadrat!
Verstehe ich nicht, wie OpenGL Rendering funktioniert? Oder fehlt mir gerade eine Art von Option oder Konfiguration, die das blaue Quadrat nicht rendern lässt? Ich benutze einen benutzerdefinierten (aber sehr einfachen) Shader, würde das irgendetwas ändern?
Die nicht akzeptierte Antwort auf this Frage scheint zu implizieren, dass sequenzielles Rendering nicht tatsächlich auftritt und Implementierung spezifisch ist, aber seine akzeptierte Antwort impliziert, dass es tatsächlich der Fall ist.
Was ist der beste Weg, um den zweiten Anruf an der Spitze zu machen? Ich möchte nicht wirklich irgendeinen globalen z-Wert haben, den ich während des ganzen Programms weiter steigern werde.
Vielleicht sehen Sie sich die Szene von "hinten" an? Wie sehen Ihre MV- und P-Matrizen aus? – aib
Argh! Wie sich herausstellte, hatte ich irgendwo eine Überblendungsfunktion aktiviert, die die Farbe der überzeichneten Werte verworfen hat. – Tomas