Ich bin etwas verwirrt über die Beziehung zwischen Framebuffer und Viewport. Ich habe eine Anwendung, die einen Haupt-FBO der Größe screenWidth + 1 und screenHeight verwendet. Ich habe einen zur Breite hinzugefügt, weil es der einzige Weg ist, den ich gefunden habe, der wirklich Vollbild in X11 aktiviert (zumindest auf dem Board, das wir verwenden).Framebuffer-Größe und Ansichtsfenster-Beziehung
In jedem Fall erstelle ich die Projektion und Kamera Matrizen basierend auf screenHidth & screenHeight (Ignorieren der +1). Es gibt keinen anderen Verweis auf dieses +1 in der Anwendung, außer wenn wir das Fenster und den Haupt-FBO erstellen. Alles in allem habe ich erwartet, dass es gut funktioniert und nur eine leere Pixelspalte am Ende meines FBO hat.
Das Ansichtsfenster, das ich verwende, wird als glViewport (0, 0, screenWidth, screenHeight) festgelegt. Die y-Koordinate ist 0, weil meine Projektion auf der y-Achse gedreht ist. Es war schon eine ganze Weile so und (ich dachte) es gab keine Artefakte aufgrund dieser +1.
Aber ich habe einen schnellen Test gemacht und diese +1 auf +500 oder eine andere große Zahl geändert und ich bemerkte, dass einige Objekte in der Szene nach rechts verschoben wurden. Es scheint, dass die Auffüllung in der FBO Zeug betrifft.
Warum sollte das der Fall sein? Nach meinem Verständnis konvertiert das Ansichtsfenster normalisierte Gerätekoordinaten in Fensterkoordinaten. Also, wenn ich das richtig verstehe, indem ich screenWidth und screenHeight für das Viewport verwende, sollte ich nur einen screenWidth x screenHeight Bereich in der FBO füllen, mit Ausnahme dieses zusätzlichen Pixels am Ende.
Kann jemand etwas Licht darauf werfen? Müsste ich mein Ansichtsfenster ändern, um es an die Größe des FBO anzupassen?
Da Sie die Daten, die Sie in einem FBO gerendert haben, nie sehen werden, müssen Sie _something_ tun, damit es tatsächlich auf dem Bildschirm erscheint. – derhass