如何在世界坐标空间中绘制文本?

时间:2019-01-01 23:11:38

标签: java fonts libgdx bitmap-fonts

我正在libGDX中创建一个游戏。由于我的应用程序设计,我想创建一些UI元素(按钮和填充物),我想像其他游戏对象一样在世界空间中绘制它们。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

我想画点文字,然后用我的世界相机将其投影到屏幕空间。然后我将y轴翻转:

point.y = viewportHeight - point.y;

然后我用ScreenViewport(用于绘制文本的单独视口)取消投影,它使用的是屏幕大小的摄像头,所以1unit == 1pixel。 现在,我可以在屏幕上与世界空间中先前选择的点位于同一位置的点上,以1unit = 1pixel的投影方式绘制文本。

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

targetWidth = endpoint.x - startpoint.x;

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

actualWidth = glyphLayout.width;

当我按这样缩放字体时

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

我的字体得到缩放,因此绘制的文本与目标宽度一样宽。

但是要注意另一个问题!当我通过FreetypeGenerator生成大小为300左右的bimap字体时,字体更大,一些字母没有绘制,并且丢失了。 (可能是错误)。