如何在世界坐标space中绘制文字?

How to draw text in world coordinate space?

我正在 libGDX 创建游戏。我想创建一些 UI 元素(按钮和东西),因为我的应用程序设计,我想在世界 space 中绘制它们作为其他游戏对象。

我正在使用 Freetype 生成器,它可以从真实字体文件 (.ttf) 生成位图字体。问题是字体的尺寸以像素为单位。

我用来渲染世界的正交相机,视口大小约为 10x10,所以当我生成大小为 10 的字体时,它几乎覆盖了整个屏幕(太大)并且看起来也很丑,因为为字体生成的位图太小(像素太少)。

我想要的是创建精灵,以相同大小绘制它(世界space)并在其上绘制文本,然后基本上创建一个按钮。

是否有一些完善的方法来处理这个问题?

感谢澄清评论,我想出了解决方案。

我选取了一个要绘制文本的点,并通过我的世界相机将其投影到屏幕上 space。然后我翻转 y 轴:

point.y = viewportHeight - point.y;

然后我用 ScreenViewport(用于绘制文本的单独视口,使用屏幕大小的相机,因此 1unit == 1pixel)取消投影。 现在我可以在投影中绘制文本,其中 1unit = 1pixel,位于屏幕上与先前在世界中选择的点相同的位置 space。

我还希望能够在矩形边界内绘制文本。为此,我选择了另一点。此时文本应该结束。与起点相同的程序,然后计算宽度

targetWidth = endpoint.x - startpoint.x;

然后我使用 GlypthLayout class 以某些(生成的)字体大小获取文本的实际宽度。

actualWidth = glyphLayout.width;

当我像这样缩放字体时

font.getData().setScale(targetWidth / actualWidth);

我的字体被缩放,所以绘制的文本宽度与目标宽度相同。

但要注意另一个问题!当我通过 FreetypeGenerator 生成尺寸更大的 bimap 字体时,大约 300 时,一些字母不会绘制,并且会丢失。 (可能是错误)。