我正在使用OpenGL绘制类似于LED VU仪表的东西。结果应与此垂直栏相似:。不幸的是,我的绘图空间受到限制,我必须恰好适合18个条形。这将导致条之间的间距为3.6像素。当绘制时,这会导致线之间的间隙存在可见差异,因为间隙宽度为2或1像素。我正在寻找一种解决方案以使用子像素渲染,然后通过某种抗锯齿方法“伪造”线条,使所有间隙呈现相同的宽度。这是到目前为止的代码:
很遗憾,启用线条平滑功能没有产生明显的效果。有什么建议吗?
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);
很遗憾,启用线条平滑功能没有产生明显的效果。有什么建议吗?
GL_LINE_SMOOTH
并不被所有实现支持。我同意 @Matt Ball 的观点,你应该将线条舍入到整数像素,并在顶部绘制边界线或留下一个间隙(在这种情况下大约为10px)。 - gavinb