Freetype 2. 加载后是否可以更改字体大小(以像素为单位)?

Freetype 2. Is there a way to change the size of the font in pixels after you have loaded it?

所以我正在尝试用 C++ 创建一个简单的游戏引擎。我需要渲染一些文本,所以我将本教程 (http://learnopengl.com/#!In-Practice/Text-Rendering) 用于 guidance。它正在使用库 freetype 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。此外,字体有时会有 low-resolution 像素提示,这有助于即使在低分辨率下也能清晰地呈现它们;不幸的是,当您生成高分辨率纹理然后将其缩小到较小的渲染尺寸时,lost/not 会使用此提示信息,因此它看起来可能不像您想要的那样清晰。