2012-03-28 11 views
1

Ich habe ein Problem beim Rendern auch einfache Formen mit partieller Opazität zu QGLFrameBufferObjects in Qt.Alpha Compositing falsch beim Rendern auf QGLFrameBufferObject vs Bildschirm

ich das Problem reduziert bis auf diese:

Wenn ich machen eine einfache Quad zu einem QGLFrameBufferObject mit Farbe auf (1,0,0, 0,5), und dann, dass auf dem Bildschirm blitten, I erhalten Sie ein Ergebnis, das für eine Deckkraft von 50% viel zu hellrot ist. Wenn ich denselben Quadrupel mit der gleichen Farbe (der gleiche Code tatsächlich) direkt auf den Bildschirm zeichne, bekomme ich den korrekten Farbwert. Wenn ich das Quad mit der Opazität == 1.0 rendere, dann sind die Ergebnisse gleich ... Ich bekomme in beiden Fällen ein volles, tiefes Rot. Ich habe bestätigt, dass die Farbe im Puffer wirklich falsch ist, indem ich den Puffer direkt mit puffer.toImage() auf Platte speichere (save ("/ tmp/blah.tif")).

In beiden Fällen habe ich den Ausgabepuffer vor dem Ausführen des Vorgangs auf (1,1,1,1) gelöscht.

Warum zeichnen sich Dinge, die ich zeichne, teilweise transparent auf, wenn sie in einen Offscreen-Puffer gezogen werden, als wenn ich sie direkt auf den Bildschirm zeichne? Es muss einen Zustand geben, den ich auf den FBO setzen muss oder so, aber ich kann nicht herausfinden, was es ist.

Antwort

3

Alpha bedeutet nicht "transparent". Es bedeutet nicht irgendetwas überhaupt. Es nimmt nur eine Bedeutung, wenn Sie es geben. Es bedeutet nur "transparent", wenn Sie einen Mischmodus einrichten, der Alpha zur Steuerung der Transparenz verwendet. Also, wenn Sie nicht set up a blend mode, dass creates the effect of transparency, dann alpha ist nur eine weitere Farbkomponente, die genau wie zum Framebuffer geschrieben wird.

+0

Wenn das, was du sagst, wirklich die Ursache meines Problems ist, dann sagst du, dass mein Mischmodus beim Zeichnen auf den Bildschirm korrekt eingerichtet wurde und nicht beim Zeichnen in einen Offscreen-Puffer. Und doch besteht der einzige Unterschied zwischen den beiden Fällen darin, dass ich einen Offscreen-Puffer erstellt und an meinen aktuellen Kontext gebunden habe. Was würde meinen Mischmodus in einem Fall richtig und in dem anderen falsch erklären? Gibt es einen für den Offscreen-Puffer spezifischen Mischmodus, den ich unabhängig vom Rest meiner Umgebung einrichten muss? – Steve

+0

@Steve: 'Also, was würde meinen Mischmodus in einem Fall richtig und falsch in den anderen erklären. Ihr Code hat einen Fehler darin. Aber du hast deinen Code nicht gezeigt, also kann ich nicht sagen. –

Verwandte Themen