调整大小后丑陋的字体,OpenGL

Posted

技术标签:

【中文标题】调整大小后丑陋的字体,OpenGL【英文标题】:Ugly font after resizing, OpenGL 【发布时间】:2013-01-01 14:04:52 【问题描述】:

我将从一张图片开始:

上图显示了以两种不同方式实现的文本,都使用了相同类型的字体 - Arial、粗体、11 号。

底部的那个是在图像编辑程序中创建的,顶部的那个是在我的 OpenGL 应用程序中创建的。更准确地说,使用 FTGL 库中的FTExtrudeFont

font_ptr font(new FTExtrudeFont(filename.c_str()));

我的问题是,为什么画成这样?我认为造成这种情况的原因可能是不同的大小调整算法,但如果是这样,我怎样才能在我的 OpenGL 应用程序中实现这种更好看的字体(底部字体)?

编辑:

要渲染字体,我只调用这个函数:

font->Render(text,         // Text to be displayed
             -1,           // Line length, which by default is left as -1
             pos);         // Position in which to draw text

【问题讨论】:

你需要一个突出的字体吗?可以试试普通的矢量字体还是带纹理的字体,看看能不能得到更好的效果? @bde 我尝试了带纹理的字体,但它是抗锯齿的,在这种情况下对我不利,因为我需要清晰、真正的黑色轮廓。 【参考方案1】:

这看起来像是由 OpenGL 中的纹理采样引起的。当您绘制的纹理(在本例中为字体)与绘制它的四边形大小不同时,就会发生这种情况。

简单的解决方案:确保纹理大小与屏幕上绘制的区域相匹配。不要将 14px 字体渲染到 12px 区域,而是使用 12px 字体或 14px 区域。

在您的问题中,您提到您的字体是“11 号”。我不知道 FTGL 库的详细信息,但我假设有一个调用会告诉您可以绘制的特定字符串的最佳尺寸。不要使用您自己的数学来计算这些,使用库。只要尺寸正确,就不会发生您遇到的问题。

【讨论】:

感谢您的回答,但我认为我无法做到这一点,因为我调用渲染的唯一函数是(它来自 FTGL 库): font->Render(text,-1,位置);所以我觉得我没有办法修改渲染区域。 就像我说的,我对 FTGL 库了解不多,但是您是否可能使用了错误的模型视图/投影矩阵,导致从顶点到像素位置的转换出错? 某事导致纹理采样。 我不知道如何检查我是否使用了“错误的模型视图矩阵”,如你所说。据我所见,其他一切似乎都是正确的——我还使用其他纹理来绘制 gui 组件的背景,并且它们正在正确显示(我的意思是,像素位于正确的位置)。

以上是关于调整大小后丑陋的字体,OpenGL的主要内容,如果未能解决你的问题,请参考以下文章

rem布局,在用户调整手机字体大小/用户调整浏览器字体大小后,布局错乱问题

获取调整后的标签字体大小

iPhone——获取 UITextField 调整后的字体大小

eclipse怎样调整字体大小(最全)

查找 UIButton 调整后的字体大小值?

如何在 Qt 表单类中调整 OpenGL 小部件的大小