【发布时间】:2010-12-14 02:48:11
【问题描述】:
我在 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 的观点,你应该将线条四舍五入到整数像素,并画一条边界线,或者只是在顶部留下一个间隙(在这种情况下约为 10 像素)。
标签: c opengl rendering 2d antialiasing