Freetype 正确尺寸渲染

Freetype correct size rendering

我目前正在编写一个呈现大量文本的 OpenGL 应用程序。文本渲染以前是使用 Qt 完成的,但出于性能原因,我们全部更改为 OpenGL 渲染。

我制作了所有着色器/渲染管线,它运行良好。 但是又看了一遍freetype的文档,还是不明白怎么渲染才正确

现在我使用函数

FT_Set_Pixel_Sizes(face, 0, mFontSize);

设置我的字体大小,但我知道这是不正确的,因为 Qt 在 'point' 中渲染(我猜..),所以现在所有的文本都变小了。

我阅读了有关使用函数

的信息
FT_Set_Char_Size(
      face,    /* handle to face object           */
      0,       /* char_width in 1/64th of points  */
      16*64,   /* char_height in 1/64th of points */
      300,     /* horizontal device resolution    */
      300 );   /* vertical device resolution      */

这是我的第一个问题,我应该在决议中加入什么?我不知道屏幕的DPI...我应该使用什么标准?

另外,无论缩放到什么程度,我都需要文本在屏幕上保持固定大小。现在,我按照本教程 https://learnopengl.com/In-Practice/Text-Rendering 在 CPU 一侧预先计算字形的顶点 但是对于参数"scale",我使用1.f / font_size.

然后,在着色器上我做

(camera * vec3(char_position.xy, 1)).xy + vertex.xy / viewport * font_size.

有了这个,我可以在屏幕上有固定的大小,最大为 45 像素,因为我要求自由打字。但从 Qt 渲染的角度来看,这是不正确的。

但我不知道如何使用 DPI 'solution'

如果您无法为您的系统计算准确的 DPI(我非常怀疑这一说法;请查看您的文档),那么您将需要做大多数其他解决方案所做的事情:猜测。

Windows,例如,假定 96 的 DPI 对于大多数系统来说是 "normal",如果您无法提供准确的数字,那么它可能是适合您的项目。

因此,如果您绝对无法获得准确的 DPI 数字,只需输入 96,然后从那里缩放字体大小。

我在 Qt/OpenGL 中创建了一个项目,用于使用 freetype 库渲染 unicode 字体。希望这有助于https://github.com/arunrvk/Qt-OpenGL-Fonts-with-Freetype-Library