我正在用 OpenGL 制作一个新贴纸。字符是使用带纹理的四边形绘制的。纹理是从使用 FreeType2 渲染的位图创建的。
滚动是通过根据dx
经过的时间和给定的速度计算 a 并更新我的 "world x":来完成的x += dx
。由于我无法影响经过的时间,dx
因此必须采用浮点值,例如0.5
.
舍入到整数确实不起作用,无论您采用哪种方式,它都会产生非常明显的抖动。我已经尝试在每次迭代中舍入“世界 x”值,保持浮动与“世界 x”但舍入给定的值glTranslate2f
,使用GL_NEAREST
而不是GL_LINEAR
。无论如何,在较小的像素尺寸下,总是存在不可接受的抖动,因此舍入不是一种选择。
这意味着我们必须使用浮点值进行渲染并使用抗锯齿(比方说GL_LINEAR
)。现在的问题是,在小像素尺寸下,字符似乎会增长和缩小,具体取决于abs(x - (int)x)
:near to0.5
或 near to 0.0
。这种增长和缩小可以被视为一种“边缘闪烁”。
我怎样才能让这种感知的增长和缩小消失?也许我必须深入研究着色器并实现我自己的抗锯齿算法?还有其他想法吗?