5

我开始在这家公司工作,该公司使用 2D OpenGL 实现来显示我们系统的数据(在 Windows 上运行)。整个系统是用 C++ 构建的(使用 C++Builder 2007)。事情是,当你放大时,他们打印的所有文本都是像素化的,我认为这是因为文本是位图:

视图示例

据我所知,他们使用与 Windows 相同的字体文件。我在这里询问了为什么会发生这种情况,我得到的答案是实现它的人(不再在公司工作)说 OpenGL 上的字体很难,这是他能做的最好的事情或类似的事情。

我的问题是:是否有任何简单有效的方法可以使文本也成为矢量(就像图片中的那些线条一样?)所以当我放大相机时,这种情况经常发生,它们不会像素化。我对 OpenGL 知之甚少,如果您有一些与此相关的指南和/或教程来为我指明正确的方向,我将不胜感激。基本上任何材料都会很棒。

4

5 回答 5

11

大多数 OpenGL 文本渲染库都是这样:为字体创建位图。这意味着除非您进行一些技巧,否则您将遇到缩放和混叠问题。

流行的黑客之一是 Valve 的方法:Chris Green。2007.“改进了矢量纹理和特殊效果的 Alpha 测试放大率”。. 您使用有符号距离场算法生成字体位图,然后帮助您在渲染过程中按比例平滑文本轮廓。Wikidot 具有用于生成距离字段的 C++ 实现

如果您坚持使用 NVidia 特定硬件,您可以尝试NVidia Path扩展,它允许您直接在 GPU 上渲染图形。请记住,它是 NVidia 唯一的东西。但总的来说,基于符号距离场的方法是最平滑且最容易实现的。

顺便说一句,freetype-gl使用 Valve 的方法以及现代管道。

于 2013-04-28T16:42:36.593 回答
4

你可以试试freetype-gl,它是一个在 OpenGL 中进行字体渲染的库。

于 2013-04-28T15:58:40.887 回答
0

在 OpenGL 中使用字体的问题是它们在不同平台上的处理不一致,并且它们的支持很少。如果您愿意使用 OpenGL 的帮助程序库(想到SDL ),那么这种行为可能会被包装,这意味着您只需要提供合适的字体文件供他们使用。

于 2013-04-28T14:19:28.277 回答
-1

你可以试试 FTOGL4,OpenGL4 的字体

于 2021-07-20T16:39:59.353 回答
-1

FTOGL4:基于矢量的 opengl 4 字体支持。现在可用于 MS-window 10。

https://github.com/search?q=ftogl4

于 2021-08-08T01:24:24.740 回答