2017-06-30 4 views
0

Ich wechsle meine 3D-Modellierungs-App von Qt QGLWidget zu QOpenGLWidget, da Letzteres die neuere bessere Version für die Verwendung von OpenGL in Qt ist. Nach dem Wechsel verhält sich OpenGL Blending jedoch anders. Wenn ich die Polygon-/Subd-Linien über die 3D-Modelle zeichne, hier mit einer geraden schwarzen Farbe mit .5 (dh 50%) in der Farbquelle alpha, mischt sich das ältere QGLWidget wie erwartet, während das neuere QOpenGLWidget irgendwie Linien zieht, die tatsächlich heller sind als die Farbe sind zeichnen sie über/Mischen mit:OpenGL-Blending scheint merkwürdig anders zu sein nach dem Wechsel von QGLWidget zu QOpenGLWidget

Ältere QGLWidget sieht schwarze Linien bei 50% Verschnitt wie erwartet: Older QGLWidget, blending black lines at 50% looks as expected Neuere QOpenGLWidget, drehen irgendwie schwarze Linien in leichtere Linien, wenn sie bei 50% Mischen: Newer QOpenGLWidget, somehow turning black lines into lighter lines when blending at 50%

Sie können ein ähnliches Problem in der roten Gitterlinie auf dem Boden sehen, wie in letzterem Fall es eine tiefrote Farbe als hellrosa zeichnet, wenn Sie blend verwenden Ing.

Ich verwende einfaches Mischen Code, im Wesentlichen die folgenden:

glDisable(GL_LIGHTING); 
glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
glColor4f(0, 0, 0, .5); 
... 
//then draw lines 

Ich vermute, es hat etwas mit, etwas anderes zu tun hat, in den Alphakanal oder etwas von Framebuffer wie das, irgendwelche Ideen? Oh, das ist auf Mac, ich habe es noch nicht auf Windows versucht.

Antwort

0

dies in Haupt Einlochen, bevor ich schaffen das QApplication es zu beheben scheint, keine Ahnung, warum:

QSurfaceFormat myFormat = QSurfaceFormat::defaultFormat(); 
myFormat.setSamples(1); 
QSurfaceFormat::setDefaultFormat(myFormat); 
+0

Eigentlich im Grunde alles, was in myFormat Ändern oben (setProfile, setVersion, etc.) scheint es zu beheben. Es ist also wahrscheinlich ein Fehler, der nach dem Zufallsprinzip behoben wird. – Thomas

Verwandte Themen