Je dessine quelque chose de similaire à un VU-mètre LED dans OpenGL. Résultat devrait être comme sur la barre verticale de celle-ci:Lignes de dessin OpenGL 2D qui ne correspondent pas exactement à Pixel raster
Malheureusement, mon espace de dessin est limité, et je dois adapter exactement 18 barres sur elle. Cela donne un espacement entre les barres de 3,6 pixels. Une fois dessiné, cela provoque des différences visibles dans les espaces entre les lignes, car les espaces sont de 2 ou 1 pixel de large. Je suis à la recherche d'une solution pour utiliser le rendu sous-pixel et "fausser" les lignes par un anti-aliasing de sorte que toutes les lacunes apparaissent de la même largeur.
Ceci est mon code jusqu'à présent
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH, GL_NICEST);
for (int i = 0; i < 18; ++i) {
float bBottom = barBottom + i*3.6f;
glBegin(GL_LINES);
glLineWidth(2);
glVertex2f(bRight,bBottom);
glVertex2f(bLeft,bBottom);
glEnd();
}
glDisable(GL_LINE_SMOOTH);
Malheureusement, le lissage tournant de ligne a montré aucun effet visible. Aucune suggestion?
Arrondis les valeurs de pixels aux entiers. –
'GL_LINE_SMOOTH' n'est pas supporté par toutes les implémentations. Et je suis d'accord avec @Matt Ball que vous devriez arrondir les lignes aux pixels intégrés, et dessiner une ligne de démarcation ou simplement laisser un espace en haut (d'environ 10px dans ce cas). – gavinb
+1 pour l'animation –