Frage

Ich bin Rendering in eine OpenGL-Off-Screen-Framebuffer-Objekt und wie es als Bild zu speichern. Beachten Sie, dass die FBO ist größer als die Anzeigegröße. Ich kann in den Offscreen-Puffer machen und sie als Textur, die funktioniert. Ich kann „blättern“ diese größere Textur durch die Anzeige unter Verwendung eines gegenüber, die mich zuversichtlich macht, dass ich in einen größeren Kontext als das Fenster zu machen.

Wenn ich den Offscreen-Puffer auf eine Bilddatei speichern es wird immer abgeschnitten. Das Codefragment für das Speichern ist:

void ofFBOTexture::saveImage(string fileName) { 
    glReadBuffer(GL_COLOR_ATTACHMENT0_EXT); 
    // get the raw buffer from ofImage
    unsigned char* pixels = imageSaver.getPixels();
    glReadPixels(0, 0, 1024, 1024, GL_RGB, GL_UNSIGNED_BYTE, pixels); 

    imageSaver.saveImage(fileName); 
} 

Bitte beachten Sie, dass der Bildinhalt abgeschnitten wird, wird der sichtbare Teil korrekt gespeichert (was bedeutet, dass keine Fehler in Pixelformaten, GL_RGB Fragen etc.), aber der verbleibende Raum wird mit einer Farbe gefüllt.

Also, meine Frage ist - was ich tue, falsch

?
War es hilfreich?

Lösung

Schließlich löste ich das Problem.

Ich habe die fbo zu aktivieren, für deren Richtigkeit zu speichern:

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
// save code
...
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

, während nur die fbo für glReadPixels Auswahl über

glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);

nicht ausreichend.

(Alle andere Dinge, wo richtig und getestet, z. B. Darstellungsgrößen, Breite und Höhe des Puffers, Bildtextur etc.)

Andere Tipps

Zwei Fragen starten: (zum Beispiel versuchen Sie, ein 1024 x 1024 Bild zu speichern Welche Größe sind Sie immer)? Wie schaffen Sie Imagesaver und sind Sie sicher, dass Ihre Breite und Höhe korrekt sind

Sie sind nicht etwas falsch zu machen, das war durchaus üblich Verhalten mit OpenGL-Grafiktreiber für eine lange Zeit - ich erinnere laufen gegen genau das gleiche Problem auf nVidia Geforce 3 Karten zumindest vor einem Jahrzehnt, und ich verabschiedete ein ähnliche Lösung -. zu einem Off-Screen-Textur-Rendering

Das klingt wie Sie haben die falsche Größe Ansichtsfenster oder etwas ähnliches.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top