Ich bin ziemlich neu in OpenGL und versuche das Rad neu zu erfinden (zum Spaß), indem ich meine eigene einfache Spiel-Engine erstelle und nun versuche, ein HUD mit Text zu erstellen. Um dies zu tun, erstelle ich programmatisch Font-Textur-Maps für den Fragment-Shader, um Quadrate zu texturieren, soweit ich weiß, ist das der normale Ansatz?Das Stapeln von teilweise transparenten Font-Texturen wird durch Ändern der Renderreihenfolge unterbrochen.
Diese meist gut funktioniert, wird der Text auf dem Bildschirm mit einem transparenten Hintergrund so dass Sie dahinter zu sehen, was wie erwartet ist (Abb. 1)
Wenn ich dann einen anderen Text Masche in der Umgebung hinzufügen, der erste, aber mit einem höheren z-index (näher an der Kamera), rendert es über den Anfang des vorherigen Textes und Mischungen (richtige Verwendung?) in der erwarteten Weise (Bild 2)
Allerdings, wenn ich dann Vertausche den Z-Index - so dass die erste Saite (die rosa) näher an der Kamera ist (aber die Renderreihenfolge ist unverändert), sehe ich den Effekt in Abb. 3 wo - obwohl der Texthintergrund immer noch transparent ist, scheint er den anderen Text überschrieben zu haben, anstatt sich damit zu vermischen.
Hinweis: Der gleiche Effekt tritt auf, wenn ich die Reihenfolge, in der die zwei Netze wiedergegeben werden, umkehren, außer dass der weiße Text der Täter ist.
Mit anderen Worten, warum mischt es nur korrekt, wenn die Reihenfolge der Z-Indizes mit der Renderreihenfolge übereinstimmt? Meine Hypothese ist, dass, wenn ich versuche, etwas "hinter" einem Quad mit einem teilweise transparenten Hintergrund zu rendern, ich es zuerst rendern muss, sonst wird die Tiefenprüfung die Spitze davon abschneiden. Ist das eine Grundregel des Grafik-Renderings, an die ich mich gewöhnen sollte? Muss ich nur die Stapelreihenfolge verfolgen und sicherstellen, dass die Artikel in der richtigen Reihenfolge gerendert werden?
Wenn Sie nicht möchten, dass Text hinter Objekten angezeigt wird, können Sie auch die Tiefenschreibfunktion für die Textgeometrie deaktivieren, aber die Tiefenprüfung aktiviert lassen. – BDL