【问题标题】:TrueType Font rendering in Java?Java中的TrueType字体渲染?
【发布时间】:2012-05-04 17:11:48
【问题描述】:

我已经制作了一个包含多个组件的 GUI,现在我需要用文本填充这些组件。

我的规格:

  • 最好使用 LWJGL (OpenGL)
  • 不是特别复杂
  • 不使用任何其他外部库(LWJGL 库除外)
  • 必须进行相当优化,它将在 fps 密集型 GUI 上大量使用
  • 有抗锯齿的可能吗?
  • 可能能够在大多数主要操作系统上运行

我怎么能在java中做到这一点?

【问题讨论】:

  • 您忘记提及您尝试过的内容或发布您编写的任何代码,尤其是针对此类特定请求。
  • @Chris 我没有尝试过任何事情,因为我根本不知道从哪里开始或应该做些什么。我用谷歌搜索了我的问题,但没有任何有用的网站,或者它们已经过时了
  • @Chris “你忘了提..” OP也忘了问一个问题。 -- OP:你有什么问题吗?

标签: java opengl fonts rendering


【解决方案1】:

我会考虑使用 SVG,尤其是 Batik 来管理字体。我自己在这方面做了很多工作,这有点像学习曲线。在担心性能之前,我会准备好简单地开始并找出您需要的特定功能。但在您给出更清晰的想法之前,我不确定我们能否提供更多帮助

【讨论】:

  • 乍一看,我可以看到 Batik 是一个额外的库,所以我认为这是不可能的。我没有考虑任何特定功能,主要是偏好,例如美观、可能的抗锯齿和可能更改实际字体?
【解决方案2】:

您有三种选择:位图字体、纹理字体和矢量字体。

Bitmap fonts 仅在您只想为 2D GUI 渲染文本时才有用。但是,如果您使用位图字体,则无法进行抗锯齿。另一方面,它们非常易于使用且渲染速度很快。

纹理字体允许抗锯齿,但同样它们最适合 2D GUI。如果您想在世界空间中渲染文本,由于正在发生纹理缩放,您会得到很多伪像。要使用纹理字体,您必须创建一个纹理图集,其中包含您要使用的特定字体的每个字符的图像(通常您需要将字符集限制为 ASCII,否则您的纹理会太大) .您可以使用 AWT 创建一个矩形图像,其中包含您需要的所有字符。然后,您可以通过为该角色渲染具有适当纹理坐标的四边形来渲染该角色。建议使用亮度 alpha 纹理,以便您可以将其与您希望文本所在的颜色混合。您可以通过为每个字符和每个字符串使用显示列表来优化它,但您会遇到问题带字距等。

如果您想在世界空间中渲染文本,矢量字体可为您提供最佳效果。他们会给你完美的字体渲染,包括。字距调整,但渲染成本更高。我通常的方法是为我要渲染的每个字符串创建一个路径(使用 AWT),展平该路径,然后使用 GLU tesselator 对其进行跟踪。这将为您提供一堆三角形、三角形条和三角形风扇,您可以将它们放入 VBO 以获得最佳性能。然后,您可以通过为 VBO 发出适当的渲染命令来渲染该字符串。您可以通过为每个字符串使用显示列表来进一步优化它。这样,您只需为每个字符串发送一个命令,但当然这仍然会比其他方法更昂贵。

【讨论】:

    猜你喜欢
    • 2015-09-28
    • 2015-11-23
    • 2017-10-15
    • 2012-03-18
    • 2013-08-26
    • 2015-02-01
    • 2014-09-02
    • 2016-05-30
    • 1970-01-01
    相关资源
    最近更新 更多