2017-06-30 1 views
0

Je suis en train de changer mon application de modélisation 3D en utilisant QGLWidget de Qt vers QOpenGLWidget, puisque cette dernière est la nouvelle version améliorée pour l'utilisation d'OpenGL dans Qt. Cependant, après avoir changé, le mélange OpenGL semble se comporter différemment. Lorsque je dessine les lignes polygone/subd sur les modèles 3D, ici en utilisant une couleur noire droite avec .5 (soit 50%) dans l'alpha source de couleur, l'ancien QGLWidget se fond comme prévu alors que le QOpenGLWidget plus récent dessine des lignes réellement plus légères que la couleur qu'ils dessin sur/mélange avec:Le mélange OpenGL semble être étrangement différent après le passage de QGLWidget à QOpenGLWidget

ancien QGLWidget, mélange des lignes noires à 50% semble que prévu: Older QGLWidget, blending black lines at 50% looks as expected récent QOpenGLWidget, transformant en quelque sorte des lignes noires dans les lignes plus légères lors du mélange à 50%: Newer QOpenGLWidget, somehow turning black lines into lighter lines when blending at 50%

Vous pouvez voir un problème similaire dans la ligne de la grille rouge sur le sol, comment dans ce dernier cas, il dessine une couleur rouge foncé comme un rose pâle lors de l'utilisation de mélange ing.

J'utilise le code de simple mélange, essentiellement les éléments suivants:

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

Je devine qu'il a quelque chose à voir avec quelque chose de différent dans le canal alpha du framebuffer ou quelque chose comme ça, des idées? Oh, c'est sur Mac, je ne l'ai pas encore essayé sur Windows.

Répondre

0

Mettre cela en principal avant de créer le QApplication semble fixer, aucune idée pourquoi:

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

En fait, changer fondamentalement rien dans monFormat ci-dessus (setprofile, setVersion, etc.) semble le fixer. Donc, c'est probablement un bug que cela corrige aléatoirement. – Thomas