我想使用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));
但这有效吗?是不是完全不需要使用mipmap?我可以制作不同的纹理,并根据尺寸选择一个。那么有更好的方法来实现这个目标吗?
答案 0 :(得分:3)
您是否尝试GL_LINEAR_MIPMAP_LINEAR
作为GL_TEXTURE_MIN_FILTER
参数?它应该在两个最近的mipmap之间混合。这可能会改善外观。
此外,您可以尝试使用此处记录的texture_lod_bias
扩展名:
http://www.opengl.org/registry/specs/EXT/texture_lod_bias.txt
答案 1 :(得分:2)
您可以使用GL_TEXTURE_LOD_BIAS
向mipmap级别添加常量,这可以帮助您完成此操作(例如,始终选择下一个更高的mipmap级别)。但是,它可能只是mipmap-nearest对于这种情况并不理想。如果你总是在屏幕空间中显示你的纹理,并且确切地知道字体大小与屏幕上的像素的对应关系,那么mipmapping可能对你来说太多了。