2D openGL绘图线不完全适合像素光栅

时间:2010-12-14 02:48:12

标签: c opengl rendering 2d antialiasing

我在OpenGL中绘制类似于LED VU表的东西。结果应该像这样的垂直条:

Animated vumeters

不幸的是,我的绘图空间受到限制,我必须准确地装上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);

不幸的是,打开线条平滑显示没有明显效果。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

两个想法:

  1. 将所有条形绘制到较大的屏幕外纹理,使间隙和宽度全部相等,然后使用双线性过滤将结果blit到所需的屏幕位置和大小。

  2. 让艺术家绘制所有完全亮起的条形图,使其看起来不错,然后从每个条形图的顶部向下绘制带有Alpha通道的黑色矩形,以使图像的所需部分变暗。

答案 1 :(得分:1)

使用多重采样(Multisampling specs)。

此外,我会使用四边形(而不是线条)来渲染这些块。

答案 2 :(得分:0)

如果无法为OpenGl上下文启用抗锯齿,则可以模拟它 - 使用这种简单的图形很容易。当你需要绘制10.6像素高的矩形时,用它的颜色绘制10个像素,然后用中间颜色的单像素线绘制(0.6的矩形颜色和0.4的背景颜色)。