OpenGL/Framebuffer Texture



  • Hallo,

    ich versuche mich in Off-Screen-Rendering. Leider bleibt mein Framebuffer anscheinend leer.

    http://pastebin.com/kWgQgk54

    Das Programm zeichnet ein texturiertes Dreieck und soll das Gesamtbild dann in einer Bilddatei abspeichern. Wenn ich es auf den Bildschirm ausgebe also `glBindFramebuffer(GL_FRAMEBUFFER, 0)' schreibe, dann sieht man das Dreieck auch in der Bilddatei (auch wenn leider nur den Bereich, welchen man auch auf dem Bildschirm sieht). Wenn ich meinen erzeugten Framebuffer benutze, dann bleibt die Bilddatei schwarz.

    Kann mir jemand vielleicht sagen, was das Problem mit dem Framebuffer ist? glCheckFramebufferStatus() ist GL_FRAMEBUFFER_COMPLETE.

    Der Framebuffer wird in init() erzeugt, gezeichnet wird in display().

    Danke 🙂



  • Wenn Du keinen Depthbuffer an den Framebuffer bindest, solltest Du Depth-Test und -Mask abschalten.



  • Ok, hab an den Anfang von display(), folgendes angefügt:

    glDisable(GL_DEPTH_TEST);
    glDepthMask(GL_FALSE);
    

    Löst aber das Hauptproblem nicht =[ (hast du denke ich auch nicht gemeint)



  • glBindFramebuffer(GL_FRAMEBUFFER, framebuffername);
    ...
    glBindFramebuffer(GL_FRAMEBUFFER, 0);
    glBindTexture(GL_TEXTURE_2D, 0);
    glReadPixels(0, 0, image.cols, image.rows, GL_RGB, GL_UNSIGNED_BYTE, image.data);
    

    Hier liesst Du ja nicht aus dem Framebuffer in den Du gerendert hast...



  • Ah ok, das hat es gelöst, vielen herzlichen Dank!

    Ich dachte glReadBuffer() sagt schon wo ich herauslesen möchte.


Anmelden zum Antworten