Как нарисовать текст в мировом координатном пространстве? - PullRequest
0 голосов
/ 02 января 2019

Я создаю игру в libGDX.Я хочу создать некоторые элементы пользовательского интерфейса (кнопки и прочее), из-за дизайна моего приложения, я хотел бы нарисовать их в мировом пространстве, как и другие игровые объекты.

Я использую генератор Freetype, который генерируетрастровый шрифт из файлов шрифтов истинного типа (.ttf).Проблема в том, что размер шрифта указан в пикселях.

Ортографическая камера, которую я использую для визуализации мира, имеет размер области просмотра приблизительно 10x10, поэтому, когда я генерирую шрифт размером 10, онохватывает почти весь экран (слишком большой), а также выглядит очень некрасиво, потому что сгенерированное растровое изображение для шрифта слишком маленькое (слишком мало пикселей).

Мне нужно создать спрайт, нарисовать его с тем же размером (мировое пространство) и нарисуйте над ним текст, и в основном создайте кнопку.

Есть ли какой-нибудь устоявшийся способ как с этим справиться?

1 Ответ

0 голосов
/ 02 января 2019

Благодаря разъясняющим комментариям я нашел решение.

Я взял точку, в которой я хотел нарисовать текст, спроецировал его на экран моей камеры мира.Затем я перевернул ось 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);

, мой шрифт масштабировался, поэтому размер нарисованного текста был таким же, как ширина цели.

Но помните о другой проблеме!Когда я генерирую шрифт bimap с помощью FreetypeGenerator с размером, превышающим 300, некоторые буквы не рисуются и отсутствуют.(возможно ошибка).

...