Freetype правильный размер рендеринга - PullRequest
0 голосов
/ 04 февраля 2020

В настоящее время я пишу приложение OpenGL, которое отображает много текста. Рендеринг текста ранее выполнялся с помощью Qt, но по соображениям производительности мы меняем все с помощью рендеринга OpenGL.

Я сделал весь конвейер шейдеров / рендеринга, он работает хорошо. Но после прочтения do c для freetype я все еще не понимаю, как правильно рендерить в нужном размере.

Сейчас я использую функцию

FT_Set_Pixel_Sizes(face, 0, mFontSize);

. размер моего шрифта, но я знаю, что это неверно, потому что Qt рендерился в 'point' (я думаю ..), поэтому весь текст теперь меньше.

Я читал об использовании функции

FT_Set_Char_Size(
      face,    /* handle to face object           */
      0,       /* char_width in 1/64th of points  */
      16*64,   /* char_height in 1/64th of points */
      300,     /* horizontal device resolution    */
      300 );   /* vertical device resolution      */

И вот мой первый вопрос, что я должен поставить в резолюции? Я не могу знать DPI экрана ... Какой стандарт я должен использовать?

Кроме того, мне нужно, чтобы на экране был фиксированный размер при любом увеличении. Сейчас я предварительно вычисляю вершину моего глифа на стороне процессора, как в этом уроке https://learnopengl.com/In-Practice/Text-Rendering Но для параметра "scale" я использую 1.f / font_size.

И затем На шейдере я делаю

(camera * vec3(char_position.xy, 1)).xy + vertex.xy / viewport * font_size.

С этим я могу иметь фиксированный размер на экране, с максимумом в 45 пикселей, как я просил, чтобы вольным шрифтом. Но это не правильно с точки зрения того, что визуализировал Qt.

Но я не вижу, как это сделать с помощью DPI 'solution'

1 Ответ

1 голос
/ 04 февраля 2020

Если вы не можете рассчитать точное значение DPI для вашей системы (утверждение, к которому я очень скептически отношусь; проверьте вашу документацию), вам потребуется сделать то, что делает большинство других решений: угадайте.

Windows, например, предполагает, что DPI для 96 является "нормальным" для большинства систем, и если вы не можете предоставить точное число, это, вероятно, хорошее число для вашего проекта.

Так что, если вы абсолютно не можете получить точное число точек на дюйм, просто наберите 96, а затем масштабируйте размеры шрифта оттуда.

...