我想使用 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 了?我可以制作不同的纹理并根据大小选择一种。那么有没有更好的方法来完成这个任务呢?
最佳答案
您可以使用GL_TEXTURE_LOD_BIAS
向 mipmap 级别添加常量,这可以帮助您实现此目的(例如,始终选择下一个更高的 mipmap 级别)。然而,可能只是 mipmap-nearest 对于这种情况并不理想。如果您总是在屏幕空间中显示纹理,并且确切地知道字体大小如何与屏幕上的像素相对应,那么 mipmap 对您来说可能太过机械化。
关于c++ - 如何让 OpenGL 选择最近的较大 mipmap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9498306/