自由型 2.有没有办法在加载字体后更改字体的大小(以像素为单位)



所以我正在尝试用c ++创建一个简单的游戏引擎。我需要渲染一些文本,所以我使用本教程 (http://learnopengl.com/#!In-Practice/Text-Rendering) 作为指导。它使用库自由类型 2。

一切正常,文本按预期呈现。但是现在,当我充实 UI 并创建标签时,我希望能够更改文本的大小。我可以通过缩放文本来做到这一点,但我希望能够通过使用像素来做到这一点。

在这里,您可以看到缩放的实际效果:

    GLfloat xpos = x + ch.Bearing.x * scale;
    GLfloat ypos = y + linegap + (font.Characters['H'].Bearing.y - ch.Bearing.y) * scale;
    GLfloat w = ch.Size.x * scale;
    GLfloat h = ch.Size.y * scale;

所以在我的方法 renderText 中,我只传递一个缩放变量,它会缩放文本。但是我更喜欢使用像素,因为它对用户更友好,有什么方法可以在 freetype 2 中做到这一点,或者我是否坚持使用比例变量?

假设您不想以不同的分辨率重新生成字形,而是希望将比例指定为像素单位而不是比率(即您想说scale = 14 pixels而不是scale = 29%),那么您可以执行以下操作: 保存传递给FT_Set_Pixel_Sizes的高度值(在教程中为 48)。现在,如果您想要 14 像素的渲染,只需将 14 除以该数字 (48),这样它就会scale = 14.0f / 48.0f .这将为您提供从最初以 48 像素高度生成的字体以 14 像素比例渲染所需的缩放。

当您这样做时,您可能还想使用 OpenGL 纹理过滤器或 mipmapping 来改善您的结果。此外,字体有时具有低分辨率像素提示,这有助于它们即使在低分辨率下也能清晰呈现;不幸的是,当您生成高分辨率纹理然后将其缩小到较小的渲染大小时,此提示信息会丢失/未使用,因此它可能看起来不像您想要的那样清晰。

最新更新