Java中的TrueType字体呈现?

Java中的TrueType字体呈现?,java,opengl,fonts,rendering,Java,Opengl,Fonts,Rendering,我制作了一个包含多个组件的GUI,现在我需要用文本填充这些组件 我的规格: 最好使用LWJGL(OpenGL) 这并不特别复杂 不使用任何其他外部库(LWJGL库除外) 必须进行相当优化,它将在fps密集型GUI上大量使用 是否有可能被消除混叠 可能具有在大多数主要操作系统上运行的能力 我如何在java中实现这一点? 我会考虑使用SVG,特别是管理字体。我自己也做了很多,这是一个学习曲线。在担心性能之前,我准备简单地开始,找出您需要的特定功能。但是,在你给出更清晰的想法之前,我不确定我们是否

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

我的规格:

  • 最好使用LWJGL(OpenGL)
  • 这并不特别复杂
  • 不使用任何其他外部库(LWJGL库除外)
  • 必须进行相当优化,它将在fps密集型GUI上大量使用
  • 是否有可能被消除混叠
  • 可能具有在大多数主要操作系统上运行的能力

我如何在java中实现这一点?

我会考虑使用SVG,特别是管理字体。我自己也做了很多,这是一个学习曲线。在担心性能之前,我准备简单地开始,找出您需要的特定功能。但是,在你给出更清晰的想法之前,我不确定我们是否能提供更多帮助。你有三种选择:位图字体、纹理字体和矢量字体

仅当您只想为2D GUI呈现文本时,此选项才有用。但是,如果使用位图字体,则无法进行抗锯齿。另一方面,它们非常容易使用,渲染速度也很快

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


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

您忘记了提及您尝试过的内容或发布您编写的任何代码,特别是对于这样一个特殊的要求。@Chris我什么都没试过,因为我根本不知道从哪里开始,或者我应该做什么。我在谷歌上搜索了我的问题,但没有任何有用的网站,或者说是outdated@Chris“你忘了提……”OP也忘了问问题OP:你有问题吗?乍一看,我可以看出蜡染是一个额外的图书馆,所以我认为这是不可能的。我脑子里没有任何具体的功能,主要是偏好,比如好看,可能的抗锯齿,可能改变实际的字体?