【发布时间】:2012-02-29 11:31:09
【问题描述】:
我想使用 FreeType 使用 OpenGL 绘制文本并使其更清晰,我为每次 mipmap 迭代从 FreeType 生成字体纹理。除了一件事,一切都很好。当我这样做时:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
OpenGL 根据文本的大小选择最近的 mipmap,但如果可用的大小是 16 和 32,而我想要 22,它会选择 16,这看起来很糟糕。有没有办法设置它,让它总是选择最近的较大的 mipmap?
我知道我可以在渲染文本的同时手动设置 mipmap 级别:
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, (int) log2(1/scale));
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, (int) log2(1/scale));
但这有效吗?那不是完全不需要使用mipmaps吗?我可以制作不同的纹理并根据大小选择一种。那么有没有更好的方法来实现呢?
【问题讨论】:
-
“我想使用 FreeType 使用 OpenGL 绘制文本并使其更清晰,我为每次 mipmap 迭代从 FreeType 生成字体纹理。”这不是一个好主意。 FreeType 呈现较小文本的方式不是适用于 mipmap 插值的方式。这就是为什么您的 GL_LINEAR_MIPMAP_LINEAR 文本看起来很糟糕的原因; FreeType 的小文本提示使小文本看起来不对。最好只有一组您使用的文本分辨率并使用它们。
-
"这就是为什么您的 GL_LINEAR_MIPMAP_LINEAR 文本看起来很糟糕。"放大的光栅化文本看起来比缩小的类似但更大的光栅化文本更糟糕。我相信这是 OP 的方法看起来很糟糕的最大原因。
-
关于mipmap相关模糊的好讨论:bgolus.medium.com/…