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
我目前正在编写一个呈现大量文本的 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