感谢澄清评论,我想出了解决方案。
我选择了一个我想绘制文本的点,通过我的世界相机将它投影到屏幕空间。然后我翻转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 字体时,一些字母不绘制,并且丢失了。(可能是错误)。