OpenGL上基于矢量的字体

时间:2013-04-28 13:58:11

标签: c++ opengl c++builder

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

Example of the view

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

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

5 个答案:

答案 0 :(得分:10)

大多数OpenGL文本渲染库都是这样的:为字体创建位图,这意味着除非你做了一些黑客攻击,否则你将遇到缩放和别名问题。其中一个流行的黑客是Valve的approach。您可以使用带符号的距离字段算法来生成字体位图,然后可以帮助您在渲染过程中平滑缩放文本轮廓。Here您可以找到距离字段生成的C ++实现。

如果您坚持使用特定于供应商的硬件并且是NVidia,您可以尝试NVidia Path扩展,这允许直接在GPU上呈现图形。记住,这只是NVidia的事情。 但总的来说,基于签名距离场的方法是最顺利和最容易实现的。

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

答案 1 :(得分:4)

您可以尝试使用freetype-gl一个库来进行OpenGL中的字体渲染。

答案 2 :(得分:0)

你可以试试 FTOGL4,OpenGL4 的字体

答案 3 :(得分:0)

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

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

答案 4 :(得分:-1)

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