Als einfache Demonstration meines Problems Rendering zu Framebuffer, Ich versuche, eine große, aber einfache Masche auf eine Textur zu machen, um später verwendet werden, aber seltsamerweise die weitere Teile, die von der Kamera entfernt sind, werden vor den Kamerateilen angezeigt, wenn sie aus einem bestimmten Winkel betrachtet werden. Trotz der unbestreitbaren Tatsache, dass ich über alle Zweifel erhaben Verwendung gründlichere Prüfung tun:OpenGL Tiefensortierung nicht auf einzelne Masche, wenn anstelle von Bildschirm
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
Als Beispiel Ich versuche, ein unterteilt Gitter (auf der XZ-Ebene) zu machen Zentriert auf den Ursprung, die mit einem glatten „Hügel“ in der Mitte des Gitters.
Wenn auf dem Bildschirm gerendert keine Fehler auftreten und die Maschen sieht wie folgt aus (gerenderte orthographischer Projektion verwendet und mit der Graustufen-Farbtiefe darstellt, wird kein Fehler Weiterhin auftreten, selbst wenn die Masche von jeder Seite betrachtet wird):
auf den Bildschirm Rendering ist natürlich getan, indem sichergestellt wird der Framebuffer auf 0 (glBindFramebuffer(GL_FRAMEBUFFER, 0);
) gesetzt ist, aber ich brauche diese Szene zu einem anderen Framebuffer zu machen, die nicht mein Bildschirm ist, um dies zu nutzen zu machen als Textur.
Also ich habe eine andere Framebuffer und eine Ausgang Textur, aufgebaut und jetzt bin ich Redering, diese Szene zu den Framebuffer (mit absolut nichts geändert, außer dem Framebuffer und die Darstellungsgröße, die die Ausgabe Textur anzupassen eingestellt ist). Um den Fehler, den ich gerade erlebe, zu demonstrieren, rendere ich dann diese gerenderte Textur auf eine Ebene, die dann auf dem Bildschirm angezeigt wird. Wenn das Gitter von der positiven x - Achse gedreht und um die y - Achse gedreht wird, zentriert auf seinem Ursprung zwischen -0,5 π rad und 0,5 π rad, sieht die gerenderte Textur genau identisch mit dem Ergebnis beim Rendern auf Bildschirm, wie auf dem Bild oben zu sehen. Wenn jedoch die Rotation um die y-Achse größer als 0,5 π rad oder kleiner als -0,5 π rad ist, wird der kuppelnahe Hügel hinter der weiter weg von der Kamera liegenden Ebene gerendert (Fakt dass der Hügel an der Kamera näher ist, kann durch betrachten der Farbe nachgewiesen werden, die debth darstellt):
(hoppla bekam den Titel falsch auf dem Fenster, ignorieren, dass)
In der Grenzflächen mit einer Rotation um die y-Achse von etwa 0,5 π rad oder -0,5 π rad sieht die Szene so aus.
(hoppla den Titel falsch auf dem Fenster stand wieder, ignorieren, dass wieder)
rekapitulieren. Dieser Fehler bei der Tiefensortierung tritt nur auf, wenn mit einem Framebuffer in eine Textur gerendert wird, und nur dann, wenn das Objekt von einem bestimmten Winkel aus betrachtet wird. Wenn das Objekt direkt auf dem Bildschirm gerendert wird, tritt kein Fehler auf. Meine Frage ist deshalb: Warum passiert das und wie (wenn überhaupt) vermeide ich es zu vermeiden.
Das erste Bild ... sieht nicht wie eine orthographische Projektion aus. Es sieht für mich wie eine perspektivische Projektion aus. –