如何让 OpenGL 选择最近的较大 mipmap?

Det*_*roc 5 c++ opengl

我想使用 FreeType 用 OpenGL 绘制文本并使其更清晰,我为每个 mipmap 迭代从 FreeType 生成字体纹理。除了一件事,一切都很好。当我这样做时:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
Run Code Online (Sandbox Code Playgroud)

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));
Run Code Online (Sandbox Code Playgroud)

但这真的有效吗?这不是完全不需要使用 mipmaps 吗?我可以制作不同的纹理并根据大小选择一种。那么有没有更好的方法来实现这一点?

and*_*wmu 3

你尝试过GL_LINEAR_MIPMAP_LINEAR作为GL_TEXTURE_MIN_FILTER参数吗?它应该在两个最近的 mipmap 之间混合。这可能会改善外观。

另外,您可以尝试使用texture_lod_bias此处记录的扩展: http://www.opengl.org/registry/specs/EXT/texture_lod_bias.txt