2

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

我的规格:

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

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

4

2 回答 2

1

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

于 2012-05-04T17:36:02.383 回答
1

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

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

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

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

于 2012-05-04T21:42:39.103 回答